PDA

View Full Version : مشکل با DllImport



babak_jooon
جمعه 09 مهر 1389, 13:26 عصر
من یه برنامه نویس vb6 هستم چند ماهی هست که به دنیای C#‎ مهاجرت کردم . اما یه مشکلی که دارم اینه که اینه که بعضی از DLL های حیاتی که با وی بی 6 نوشتم رو اینجا در سی شارپ احتیاج دارم . با جستجو هم در این سایت و هم در وب دستور DllImport رو پیدا کردم . حالا 2 سوال دارم اگه اساتید جواب بدن یه دنیا ممنونشون میشم :بوس:

1- اصلاً میشه دی ال ال های نوشته شده با VB6 رو به دات نت با دستور DllImport فراخوانی کرد ؟

2- اگه جواب سوال 1 مثبته چه جوری من هرچی سعی و تلاش کردم خطا میده که Unable to find an entry point named 'myFunction' in DLL 'SubUtility.dll'

لطفا راهنمایی کنین .

mehdi.mousavi
جمعه 09 مهر 1389, 23:41 عصر
سلام.
ابتدا Dependency Walker رو از اینجا دریافت کنید (http://www.dependencywalker.com/depends22_x86.zip). پس از باز کردن فایل zip، فایل depends.exe رو اجرا کنید و DLL ای که در VB6 ایجاد کرده بودید رو باز کنید. سپس در ستون Function دنبال تابعی که میخواهید Call اش کنید بگردید و در ستون سمت راست، Entry Point اونو ببینید.

پاورقی: پیام خطایی که میگیرید نشون میده که تابع myFunction در dll وجود نداره، یا بدلیل Name Mangling اسمش myFunction نیست و پیشوند یا پسوندهایی به اون اضافه شده (من در مورد VB6 اطلاعاتی ندارم که بخوام دقیق بهتون پاسخ بدم). Depends بهتون کمک میکنه تا این اطلاعات رو در بیارید و Entry Point مناسب رو در اون DLL پیدا کنید.

آناهیتا_مولایی
دوشنبه 12 مهر 1389, 19:10 عصر
درود

من هم همین مشکل رو دارم اون برنامه ایی که فرمودین رو هم دانلود کردم واسه تست کردن هم یه پروژه دی ال ال با وی بی 6 نوشتم و یک کلاس هم درست کردم که حاوی یه تابع عمومی هست کامپایلم کردم و فایل دی ال ال رو با اون برنامه باز کردم اما هیچ کلاسی که من با وی بی 6 دارم رو نشون نمی ده لطفا راهنمایی کنین :ناراحت:

http://10306.20upload.net/files/sh4/12862082031.gif

mehdi.mousavi
دوشنبه 12 مهر 1389, 22:01 عصر
درود من هم همین مشکل رو دارم اون برنامه ایی که فرمودین رو هم دانلود کردم واسه تست کردن هم یه پروژه دی ال ال با وی بی 6 نوشتم و یک کلاس هم درست کردم که حاوی یه تابع عمومی هست کامپایلم کردم و فایل دی ال ال رو با اون برنامه باز کردم اما هیچ کلاسی که من با وی بی 6 دارم رو نشون نمی ده لطفا راهنمایی کنین

سلام.
حقیقتش من در مورد VB هیچگونه اطلاعاتی ندارم. پاسخی که دادم صحیحه (چون ارتباطی به زبان برنامه نویسی پیدا نمیکنه) اما الان روی اینترنت جستجو کردم و بنظر میرسه VB قادر نیست DLL های Standard ای تولید کنه که حاوی Export Table باشن. اینو باید خودتون بررسی کنید... (البته برخی به Add-in هایی اشاره کرده اند که چنین امکانی رو مهیا میکنه، مثل TweakVB اما حقیقتش فرصت اینو ندارم که بخوام بررسی کنم ببینم این مساله صحت داره یا خیر).

ببینید، توی C/C++ با ساز و کارهایی میشه کلاسها یا توابع رو Export کرد. شما هم باید دنبال روشی باشید که بتونید با استفاده از اون توابع مورد نظرتون رو Mark کنید تا در Export Table قرار بگیرن و قابل استفاده توسط دیگر برنامه ها باشن (البته بازم تکرار میکنم، اگر VB چنین امکانی رو در اختیارتون قرار بده!). این کدی که شما نوشته اید یه تابع ساده هستش و قطعا چنین تابعی در Export Table قرار نمیگیره.

البته ظاهرا توی VB امکان ایجاد ActiveX دارید، اگر اینکارو کنید، اونوقت می تونید توی .NET بدون زحمت با اون ActiveX Control ها کار کنید (از طریق Interop)... که البته، این دیگه یک Regular DLL نخواهد بود.

موفق باشید.