PDA

View Full Version : DLL



regbyte
دوشنبه 12 شهریور 1386, 19:28 عصر
با سلام
من یه DLL با ++C ساختم و در برنامه ام Import کردم


[DllImport("My.dll")]
publicstaticexternstring mStrs(int a);

روی سیستم خودم فایل Dll رو پیدا می کنه و مشکلی نیست
اما روی سیستمهای دیگه پیداش نمی کنه ؛ مشکل از کجاست؟

regbyte
دوشنبه 12 شهریور 1386, 20:44 عصر
آیا باید رجیسترش کنم؟ اگر بله. چطوری؟

choobin84
سه شنبه 13 شهریور 1386, 06:29 صبح
ضرورتی به رجیستر نیست.اونو به پروژه تان Add Refrence کنید.
روی Solution Explorer روی نام پروژه راست کلیک کنید و Add Refrence رو انتخاب کنید . دی ال ال رو اضافه کنید.
برای استفاده از اون هم باید از کلاسهای درون اون نمونه سازی کنید.

MyDll.MyClass md=new MyDll.MyClass();

regbyte
سه شنبه 13 شهریور 1386, 10:40 صبح
من با Win32 این Dll رو ساختم،(تا کدش Native باشه) در نتیجه نمی توانم، بصورتی که شما توضیح دادید، از آن استفاده کنم.
لطفا راهنمایی کنید.

mehdi.mousavi
پنج شنبه 15 شهریور 1386, 15:53 عصر
من با Win32 این Dll رو ساختم،(تا کدش Native باشه) در نتیجه نمی توانم، بصورتی که شما توضیح دادید، از آن استفاده کنم.
لطفا راهنمایی کنید.


سلام.
ابتدا مطمئن بشید که تابعی که قصد Call کردن اونو در C# دارید، export شده. برای export کردن تابع می تونید از فایل .def استفاده کنید، یا اونو بصورت غیر Declarative، هنگام تعریف کلاس با __declspec(dllexport)، دکوریت کنید.

اما برای استفاده، اگر فرض کنیم که می خواهید Late Binding صورت بگیره، میتونید با LoadLibrary و GetProcAddress که با استفاده از DllImport اونو به C# معرفی می کنید، به هدفتون برسید. این مثال مطلب رو بخوبی نشون میده. (http://www.codeproject.com/csharp/dyninvok.asp)

روش دیگه ای هم روی اینترنت دیدم، اما هیچوقت امتحان نکردم. اونم استفاده از EntryPoint Property هنگام DllImport هستش. مثلا:



[ DllImport("myNativeDll.dll", EntryPoint="myNativeFunction") ]
public static extern int myNativeFunction();

در هر دو حالت، مطمئن بشید که فایل DLL کنار EXE برنامه C# قرار گرفته.