PDA

View Full Version : استفاده از win32 dll در سی شارپ



mehrzad007
شنبه 03 آذر 1386, 13:41 عصر
سلام
من یه dll دارم که با دلفی نوشته و کامپایل شده و الان می خوام اونو توی سی شارپ استفاده کنم . با جستجویی که کردم متوجه شدم که باید از تابع dllimport استفاده کرد . سعی کردم با کمک این تابع دی ال ال رو استفاده کنم اما متاسفانه نشد . خطا مربوط به تقاضای دی ال ال به دسترسی حافظه یا همچنین چیزی بود . از دوستان خواهشمندی که دی ال ال رو که اینجا گداشتم دانلود کنند و اگر توانستند ازش استتفاده کنند یه ندایی بدهند .

Inprise
شنبه 03 آذر 1386, 13:53 عصر
بدون اینکه هدر DLL‌ رو بدی کسی نمیتونه ازش استفاده کنه .

mehrzad007
شنبه 03 آذر 1386, 19:25 عصر
مگه نمیشه از dumpbin استفاده کرد؟ :متفکر:
من سورس دی ال ال رو گذاشتم . اگر امکانش هست دوستان کمک کنند . که بد جوری تو گل موندیم...:ناراحت:

mehrzad007
یک شنبه 04 آذر 1386, 11:31 صبح
چشم یاری داریم دوستان .....

anubis_ir
یک شنبه 04 آذر 1386, 11:54 صبح
این dll دلفی چه در اینجا و چه در جاهای دیگر مشکل خواهد داشت. نباید از string دلفی در dll‌ برای دریافت پارامتر و یا ارائه خروجی تابع استفاده کنید. از pchar‌ و امثال آن استفاده کنید که در زبانهای مشتق شده از C و غیره معادل داشته باشد.

mehrzad007
یک شنبه 04 آذر 1386, 21:41 عصر
بالاخره حل شد !
در مورد نحوه ساخت DLL در دلفی نمی تونم توضیح بدم چرا که دوستان زحمتشو کشیدن .
آقای علی مشاطان (ali_mashatan@yahoo.com) و آقای کسری رحیملو (kasra@nirasoftware.com)
اما برای بقیه کار :
برای وارد نمودن DLL به محیط دات نت (win32 dll ) از دستور <dllimport > استفاده کردم . که به شکل زیره :


Imports System.Runtime.InteropServices
Module Module1
<DllImport("NTTacDecrypt2.dll")> _
PrivateFunction NTDecrypt(ByVal password AsString) AsString
EndFunction

توضیحات بیشتر رو می تونید از لینک های زیر بخونید :
http://www.codeproject.com/cspharp/marshalCPPclass.asp
http://www.codeproject.com/dotnet/NativeWrapper.asp
http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute( vs.71).aspx
البته همونطور که گفتم به یه مشکل برخوردم که بالا گفتم که دلیلش این بود :


این dll دلفی چه در اینجا و چه در جاهای دیگر مشکل خواهد داشت. نباید از string دلفی در dll‌ برای دریافت پارامتر و یا ارائه خروجی تابع استفاده کنید. از pchar‌ و امثال آن استفاده کنید که در زبانهای مشتق شده از C و غیره معادل داشته باشد.

و


Your source code had some problems, because the parameter passing algorithm in C# is deferent with Delphi.
C Base languages push the arguments from right to left into the stack & Pascal based languages vice versa.
Also the Pascal ANSI String type is not compatible with the C#, because C# uses the Null terminated Strings type.

که با تبدیل کد بالا (کد ضمیمه دوم ) به کد ضمیمه این پست حل شد ...
از تمام دوستانی که کمک کردن هم دوستانی که توی این تاپیک و هم تاپیک قبلی تو بخش دلفی هم دوستانی که نام بردم کمال امتنان و تشکر رو دارم . امیدوارم مورد استفاده قرار بگیره ....

mehrzad007
پنج شنبه 08 آذر 1386, 13:31 عصر
ضمیمه رو یادم رفت ...