سلام
من باید یک پروژه نیمه کاره دوستم رو تموم کنم ؛ پروژه مربوط به vc++ هست ؛ من با سی پلاس پلاس آشنا هستم و باهاش کار کردم ؛ ولی الان برنامه دوستم یک فایل dll داره که نمی دونم چطور باید ازش استفاده کنم توی پروژه .
لطفا اگه کسی می دونه چطور و کجا باید این فایل رو در پروژه قرار بدم و چطور فراخوانیش کنم ؛ ممنون میشم
شما اول باید بدونید که اون فایل dll چه توابعی از داخلش export شده و هر کدوم چه پارامتر هایی دارند و چه کاربردی
دارند. اسم توابع رو می توانید با استفاده از ابزار Dependency Walker پیدا کنید اما پارامتر ها و کاربرد توابع رو یا
باید با دسترسی به کد اون DLL بدانید یا راهنمایی برای استفاده از اون DLL وجود داشته باشه، وگرنه نمیشه
با اطلاعات کمی که سایر برنامه ها بهتون می دهند با یک DLL ناشناخته کار کنید.
Dependency Walker 2.2
داونلود مستقیم Dependency Walker 2.2 نسخه های 32 و 64 بیتی به حجم حدودا 600 کیلوبایت :
depends22_x86.zip
depends22_x64.zip
فرضا اگر در sample.dll یک تابعی با اسم MyFunction وجود داشته باشه که دو پارامتر از نوع LONG داره و مقدار
بازگشتی تابع هم از نوع LONG است اینطوری باید تابع را فراخوانی کنید :
کد:
typedef LONG (__stdcall *pMyFunction)(LONG value1, LONG value2);
HINSTANCE hDLL = LoadLibrary("sample.dll");
if (hDLL != NULL)
{
pMyFunction MyFunction = (pMyFunction)GetProcAddress(hDLL, "MyFunction");
LONG result = MyFunction(10, 20);
FreeLibrary(hDLL);
}
تعریف کردن ProtoType تابع :
کد:
typedef LONG (__stdcall *pMyFunction)(LONG value1, LONG value2);
فراخوانی کردن فایل DLL در برنامه :
کد:
HINSTANCE hDLL = LoadLibrary("sample.dll");
اگر فراخوانی کردن فایل بدون مشکل انجام شده باشد این شرط برقرار است :
ایجاد کردن یک دسترسی به تابع در برنامه :
کد:
pMyFunction MyFunction = (pMyFunction)GetProcAddress(hDLL, "MyFunction");
یک مثال برای فراخوانی کردن تابع در برنامه :
کد:
LONG result = MyFunction(10, 20);
هر زمانی که کارتان با فایل DLL فراخوانی شده تمام شد آزادش کنید :