استفاده از فایل dll در برنامه VC++

masima

Member
سلام
من باید یک پروژه نیمه کاره دوستم رو تموم کنم ؛ پروژه مربوط به vc++ هست ؛ من با سی پلاس پلاس آشنا هستم و باهاش کار کردم ؛ ولی الان برنامه دوستم یک فایل dll داره که نمی دونم چطور باید ازش استفاده کنم توی پروژه .

لطفا اگه کسی می دونه چطور و کجا باید این فایل رو در پروژه قرار بدم و چطور فراخوانیش کنم ؛ ممنون میشم
 

the_king

مدیرکل انجمن
سلام
من باید یک پروژه نیمه کاره دوستم رو تموم کنم ؛ پروژه مربوط به 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");

اگر فراخوانی کردن فایل بدون مشکل انجام شده باشد این شرط برقرار است :
کد:
if (hDLL != NULL)
{
}

ایجاد کردن یک دسترسی به تابع در برنامه :
کد:
	pMyFunction MyFunction = (pMyFunction)GetProcAddress(hDLL, "MyFunction");

یک مثال برای فراخوانی کردن تابع در برنامه :
کد:
	LONG result = MyFunction(10, 20);

هر زمانی که کارتان با فایل DLL فراخوانی شده تمام شد آزادش کنید :
کد:
	FreeLibrary(hDLL);
 

masima

Member
الان یک مشکل بزرگتر ایجاد شده :
برنامه دوستم با VS 2010 هست در صورتی که من VS2005 دارم و نمیتونم فایل .sln اون رو باز کنم ؟
تو رو خدا اگه راه حلی دارید بهم بگید ؛ من الان امکان نصب vs2010 رو ندارم !

منظورم از vs همون visual studio هست
 

the_king

مدیرکل انجمن
الان یک مشکل بزرگتر ایجاد شده :
برنامه دوستم با VS 2010 هست در صورتی که من VS2005 دارم و نمیتونم فایل .sln اون رو باز کنم ؟
تو رو خدا اگه راه حلی دارید بهم بگید ؛ من الان امکان نصب vs2010 رو ندارم !

منظورم از vs همون visual studio هست

اگه از امکانات نسخه های جدیدتر در کد برنامه استفاده نشده باشه می توانید با Solution Converter تبدیلش کنید.
این ابزار Solution Converter توانایی تبدیل کردن نسخه های مختلف پروژه رو داره :
كمك فوري:كار با پروژه نوشته شده در 2010 ، در ورژن 2008
 

masima

Member
ممنون دوست عزیز ولی این برنامه از vc++ پشتیبانی نمی کنه !!

نرم افزار دیگه ای نمی شناسید ؟
 

the_king

مدیرکل انجمن
ممنون دوست عزیز ولی این برنامه از vc++ پشتیبانی نمی کنه !!

نرم افزار دیگه ای نمی شناسید ؟

نه، چاره اش اینه که یک پروژه جدید با همون مشخصات توی ویژوال استدیو تون بسازید و بعد فایل های کد پروژه قبلی
رو بهش اضافه کنید.
 

masima

Member
ممنون ، من زیاد توی این مورد آشنایی ندارم ، اگه ممکنه راهنماییم کنید ؛
من یک سری از فایل ها مثل dll رو که می خوام به پروژه اضافه کنم ، می گه باید براش یک role ایجاد کنم و آدرس و نام اون رو ازم می خواد ، در این مورد باید چه کار کنم ؟
 

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

بالا