PDA

View Full Version : استفاده از یک Dll که توش یک تابع است



راحله سعادتی
پنج شنبه 17 فروردین 1385, 22:50 عصر
استفاده از یک Dll که توش یک تابع است

من این Dll را تو دلفی 7 نوشتم

حالا نمی دانم تو .net چه جوری ازش استفاده کنم

یکی کمکم کنه .

mamadgmail
جمعه 18 فروردین 1385, 01:52 صبح
برای استفاده از کامپوننت ها باید dll موردنظرتون در پروژه در قسمت Refrence اضافه کنید. برای اینکار هم در soulotion Exp بر روی refrence رایت کلیک کنید و بعد ADD رو برنید و بعد dll رو انتخاب کنید.

خوش باشید.

M.kavyani
جمعه 18 فروردین 1385, 10:23 صبح
استفاده از یک Dll که توش یک تابع است

من این Dll را تو دلفی 7 نوشتم

حالا نمی دانم تو .net چه جوری ازش استفاده کنم

یکی کمکم کنه .
با سلام
سوالی مشابه و دقیقا" همین سوال را مطرح کرده بودید که در اینجا پاسخ دادم
http://www.barnamenevis.org/forum/showthread.php?t=22669

دوست عزیز این تابع شما چکار میکند. شاید بهتر از اون موجود باشه:چشمک:

راحله سعادتی
جمعه 18 فروردین 1385, 18:04 عصر
یک تابع معمولی که یک عدد را میگیره بعد در 3 ضرب میکنه

نگید که حالم خوب نیست !

این مثال است

M.kavyani
جمعه 18 فروردین 1385, 20:47 عصر
یک تابع معمولی که یک عدد را میگیره بعد در 3 ضرب میکنه

نگید که حالم خوب نیست !

این مثال است
نه اینجا هیچ کس به کسی توهین نمیکنید. به نظر من شما بهترین گزینه را انتخاب کرده اید. یعنی کار با ابزار ساده و آسون. براس شما آرزوی موفقیت میکنم.
راستی من تا به حال چک نکردم که آیا تابعی که با دلفی نوشته شده است تو وی بی کار میکنه یا نه خواهشا" بعدا" نتیجه رو به ما هم بگو:چشمک:

niloufar
شنبه 19 فروردین 1385, 18:44 عصر
سلام
آقای کاویانی! خانم سعادتی احتمالا منظورشون این نبوده که همینجوری بگن چه تابعی کار میکنن تا تشویقی بگیرن :- ) منظورشون جواب آخرین پست شما تو اون تاپیک موازی است که خودتون لینکشو دادید. اونجا گفته بودید که به نوع تابع بستگی داره... و ایشون اینجا در جواب تابعشون رو گفتن که شما توضیحشو بدید.

اما خانم سعادتی. وقتی یه کلاس تبدیل به Dll میشه وقتی به رفرنسها اضافه بشه با استفاده اون به صورت کلاس عادی هیچ فرقی نمیکنه و باید یه Instance از اون تعریف کنید و از متدها و مشخصه های اون استفاده کنید.

البته من هم مثل آقای کاویانی امتحان نکردم که آیا Dllهای ساخته شده در دلفی در دات نت هم کار میکنن یا نه. خصوصا اگه در دلفی غیر از ورژن دات نتش باشه که واقعا بعید به نظر میرسه کار کنه و اگه دارید استفاده میکنید و به خطا برمی خورید، شاید به این دلیل باشه.

Mehrafrooz
شنبه 19 فروردین 1385, 19:54 عصر
با سلام
این تجربه شخصیه منه که برام پیش اومده :
در دات نت 2005 نسخه بتا 2 یک dll برای چک کردن تاریخ با استفاده از jalalicalander ساختم . تو همون نسخه خوب کار میکرد . ولی وقتی نسخه فاینال اومد وقتی خواستم از اون dll استفاده کنم پیغام خطا می داد که jalalicalander وجود نداره و درست هم بود چون تبدیل به persiancalander شده بود .
شاید بشه توابع ساده مثلا جمع دو عدد رو استفاده کرد ولی هر تابعی رو نمیشه .
البته این نظر شخصیه و ساده ترین راه تستش هست .

omid_Ahmadi
شنبه 19 فروردین 1385, 20:47 عصر
فایلهایی که در .NET قابل استفاده هستند همونطور که احتمالا توی قسمت Add Reference دیدید یا می تونن یه اسمبلی .NET باشن یا یه شئی COM یا یه تابع توی یه فایل DLL قدیمی (البته این آخری یه مقدار سخت تره).

اگر این DLL حاوی یه کامپوننت COM باشه، .NET میاد یه اسمبلی مخصوص ایجاد می کنه که به صورت یه پوسته برای اون کامپوننت به حساب می یاد. بعد شما می تونید توی برنامه تون از اوون کامپوننت COM عین یه اسمبلی .NET استفاده کنید. برای این کار هم از ابزار tlbimp.exe که در فریم ورک .NET وجود داره استفاده کنید (برای عکس این قضیه، یعنی استفاده از اسمبلی های .NET در یک کامپوننت COM هم می تونید از ابزار tlbexp.exe در فریم ورک استفاده کنید).

به این مورد میگن COM Interoperability. اگر می خواید در این مورد بیشتر بدونید، می تونید دنبال این کلمه بگردید.

اگر هم فایل DLL، یه اسمبلی .NET باشه که وضعیت مشخصه که باید چی کار کرد.

اما این طور که از شرایط این تاپیک میشه فهمید، این DLL ای که به وسیله ی دلفی ایجاد شده، فقط شامل یه تابع است. پس شرط سوم براش صادقه. برای استفاده از این تابع باید از P/Invoke یا همون Platform Invoke استفاده کرد. برای استفاده از P/Invoke باید اول نیم اسپیس InteropServices رو به برنامه اضافه کنید. بعد یه کلاس مخصوص ایجاد کنید و متد مورد نظرتون رو توی اوون کلاس تعریف کنید. در این کلاس باید با استفاده از اتربیوت DllImportAttribute تابع مورد نظرتون رو از فایل DLL ایمپورت کنید به برنامه و براش توی برنامه ی خودتون یه پروتو تایپ جدید تعریف کنید. البته این پروتو تایپ باید از نوع static و extern باشه.
بعدش می تونید توی برنامهتون به صورت عادی ازش استفاده کنید.

مثلا فرض کنید می خواهیم متد MessageBox رو از فایل User32.dll استفاده کنیم. برای این کار باید از کد زیر استفاده کنیم:



using System.Runtime.InteropServices;

public class Win32 {
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MessageBox(int hWnd, String text,
String caption, uint type);
}

public class HelloWorld {
public static void Main() {
Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
}
}


برای اطلاعات بیشتر در این یکی موضوع هم می تونید به دنبال کلمه ی P/Invoke یا Platform Invoke بگردید. راستی، استفاده از API ها هم در .NET به همین صورت انجام میشه.

فکر کنم با این توضیحات، دیگه این دوستمون فهمیده باشه که بهتره بره همون تابع رو توی .NET بنویسه.:چشمک: :لبخند:

omid_Ahmadi
شنبه 19 فروردین 1385, 20:52 عصر
لینک زیر هم P/Invoke رو با جزئیات بررسی کرده:

http://msdn2.microsoft.com/en-US/library/0h9e9t7d(VS.80).aspx

mahboubi
چهارشنبه 27 اردیبهشت 1385, 11:55 صبح
سلام
برای لود هر dll در دات نت باید ابتدا از منوی project و گزینه properties این dll رو به برنامه ت add کنی
فکر می کنم dll کی شما نوشتید بر اساس com هستش که استفاده کردن اون توی دات نت ممکنه برنامه شما رو دچار مشکل کنه جون یک سربار اضافی به .net اضافه میشه سعی کنید از dll که با دات نت نوشته شده اند د ربرنامه های دات نت استفاده کنید یا در حالت کلی از دات نت برای نوشتن هر برنامه ای استفاده نکنید چون دات نت برای soa طراحی شده .
ولی اگر می خواید می تونید از روشی که omid_ahmadi گفتند استفاده کنی
مرسی

omid_Ahmadi
پنج شنبه 28 اردیبهشت 1385, 18:18 عصر
استفاده کردن اون توی دات نت ممکنه برنامه شما رو دچار مشکل کنه جون یک سربار اضافی به .net اضافه میشه


سربار اضافی وجود نداره، فقط استفاده از اون ممکنه یه سری مشکلات دیگه ایجاد کنه که در قسمتهای دیگه ی سایت توضیح دادم