Fa طریقه پلاگین نویسی با ویژوال بیسیک

ehsan_axe

Member
سلام دوستان
میخواستم لطف کنید . بگید چطوری یه dll تو vb بسازیم و چطور بنویسیم که بتونه با mmb رابطه برقرار کنه
ممنون میشم که توضیح بدید ... یا اینکه یه pdf در این رابطه برام لینک کنید . با تشکر...
-----------------------------------------------------------------------------------------------------------
.::کسانی که گذشته را فراموش می کنند روزی به ناچار باید آن را تکرار کنند::.
 

Silver PC

Well-Known Member
سلام ! فک کنم قبلا هم پرسیدن دوستان گفتن که با ویژوال بیسیک نمیشه برای mmb پلاگین نوشت !

موفق باشید
 

the_king

مدیرکل انجمن
تابع هایی که فایل های DLL در اختیار سایر برنامه ها قرار می دهند طبیعتا یکسری پارامتر ورودی و خروجی دارند،
اما شیوه هایی که این پارامتر ها رو در حافظه قرار می دهند در کامپایلر ها (زبان ها) متفاوته.
مثلا اینکه پارامتر ها از چپ به راست در حافظه قرار بگیرند یا راست به چپ، مقدار پارامتر ها در Register های پردازنده
قرار بگیرند و یا در حافظه پشته (Stack) و اینکه چه بخشی مسئول خارج کردن این داده ها از پشته است.

مثلا cdecl اسم شیوه ای است که اکثر کامپایلر های C بصورت پیشفرض ازش استفاده می کنند.
یا شیوه pascal که توی ویندوز 3.1 و اولین نسخه Delphi استفاده شد.
شیوه stdcall در ویندوز خیلی کاربرد داره، چون توابع API ویندوز ازش استفاده می کنند.
دلفی های فعلی از شیوه fastcall یا همون register استفاده می کنند، در ضمن دلفی موقع ارتباط برقرار کردن با
COM یا همون Component Object Model یک شیوه دیگه به اسم safecall رو بکار می بره.

در بعضی از کامپایلر ها فقط یک شیوه مشخص پشتیبانی میشه مثل ویژوال بیسیک، ولی در بعضی از کامپایلر ها
برنامه نویس حق انتخاب داره. مثل Microsoft MASM و ++Microsoft Visual C

MMB طوری طراحی شده که نمی تونه از DLL هایی به عنوان پلاگین استفاده کنه که تابع هاش از شیوه stdcall
استفاده می کنند، در حالی که ویژوال بیسیک فقط از stdcall پشتیبانی می کنه.

دو راه حل هم بیشتر وجود نداره :

یا باید یک فایل dll به عنوان واسطه طراحی بشه که بین MMB و DLL ای که با ویژوال بیسیک ساخته شده نقش
میانجی رو بازی کنه، یعنی خودش پلاگین MMB باشه ولی هر چی از MMB گرفت به DLL ما ارسال کنه و هر چی
از DLL ما دریافت کرد به MMB تحویل بده.

یا باید کد های ماشین برنامه ویژوال بیسیک طوری دستکاری بشه که از شیوه cdecl استفاده کنه، نمونه چنین
کاری رو قبلا توی ویژوال بیسیک انجام داده ام (فراخوانی توابع API بدون Declare در ویژوال بیسیک)
 

BEHESHT

Well-Known Member
ضمن فرمایشات دوست عزیزمون علی سعید بگم که این گنگی stdcall بر طرف شه مثلا شما برای استفاده توابع API مجبور به استفاده از شیوه stdcall هستید که به این شکل توضیح میدم

تابع BEEP در kernel32 دو تا پارامتر داره پارامتر اول فرکانس پارامتر دوم زمان تو زبان های برنامه نویسی ما عادت داریم به این شکل بنویسم:

کد:
Beep(fercanc,time);

اما برای ارسال این تابع شما مجبور هستید به این شکل تو زبان اسمبلی عمل کنین:
کد:
push time
push frcance
call kernel32.beep
یعنی دقیقا بر عکس اون چیزی که شما انتظار دارین یه مثال دیگه میزنم دقیق متوجه بشین:

کد:
messagebox(0,"hello world","title",48);

استفاده تو ASM :

کد:
push 48
push title
push hello world
push 0
call user32.messagbox

البته فک نکنین اسمبلی اینقدر هلو هست ها برای پاش کردن به پشته متن بیاد کلی کار انجام بدیدکه من فقط شبیه سازی کردم

حالا خودتون قضاوت کنین وی بی چی کار می کنه

موفق باشید
 

جدیدترین ارسال ها

بالا