PDA

View Full Version : مبتدی: The Simplest way Dynamic Lirarary Loading and Careating and using ِDLL And API s



mk8800
یک شنبه 29 آذر 1388, 20:24 عصر
سلام دوستان عزیز من هر چند این مطلب چندین بار تا حالا تو انجمن مطرح شده ولی فکر کنم این روش ساده ترین و سریعترین و کاربردی ترین روش استفاده از DLL هاست .:خجالت:
من این روش را با ازمون وخطا پیداکردم مطلب های زیادی را خوندم ولی به نظرم این راه از همه ساده تر و قابل فهم تره...

قبل از هر چیز می گم که من یه تازه کارم پس اگه عیبی دیدین اول ببخشید و دوم تذکر دهید.

خوب بریم سر اصل مطلب تکه کد اول مربوط به تعریف های مورد نیاز برای ساخت یه DLL که ساده ترین وکوتاه ترین کد انتخاب شده :

extern "C" __declspec (dllexport) long _stdcall msg(char *str);
long _stdcall msg(char str[])
{
MessageBoxA(0,str," ",0);
return 0;
}

ابتدای کد بالا رو نگاه کنید جایی که نوشته شده extern "C"حرف C میتونه به C++‎‎‎‎هم تغییر کنه که اون وقت اسم تابع شما به صورت عجیب و غریبی تغییر می کنه مثلا اسم تابع بالا که msg تبدیل میشه به@msg$qqspc و عبارت _stdcall هم اگه حذف بشه اسم تابع به صورت _msgدر میاد یعنی یه"_"به اولش اضافه میشه اگه توضیح فنی تر خواستید بگید.
یه چیزی منظورم از تغییر اسم این نیست که شما در کمپایلر تغییری ببینید بلکه در هنگام کمپایل توابع با اسم هایی با قاعده بالا در external table قرار میگیرند و باید با این اسم ها فرا خوانی شوند.

خوب حالا تکه کد مربوط به استفاده از DLL :

int (__stdcall*msg)(char *s);


int main(int argc, char* argv[])
{
HMODULE hd=LoadLibraryA("dll.dll");
(long)msg=(long) GetProcAddress(hd,"msg");
ShowMessage((int)msg);
msg("Hey Chik It Work CorrectlY!?");
return 0;
}

خوب امید وارم استفاده کنید ...
دوتا فایل پروژه که یکیش مال DLL و ان یکی مال پروژه اجرایی را براتون گذاشتم تا اگه دچار مشکلی شدید یه نگاهی بهش بندازید .به نظر من این بهترین روش برای استفاده از API هاست
راستی من روی ورژن ۶ BCB کار میکنم تو یزد ورژن بالا تر از این گیر نمیاد و سیستم من هم هکین رو به زور بار می کنه...

قدرت واقعی در تو پنهان است کافیست آن را کشف کنی.:بوس::چشمک::تشویق: