PDA

View Full Version : استفاده از dll كامپايل شده در ويژوال سي - در دلفي



joker
شنبه 22 مرداد 1390, 02:00 صبح
يك dll دارم كه 4 تا تابع اكسپورت داره
منتها شكل اكپسورتشون معمولي نيست
در جدول Export Table به اين شكل هست :


?XMYFucntion@@YAHPBD0PAIPADPAH@Z


اينطوري كه صداش ميزنم كه خطا ميده


Function XMYFucntion(any parameter* ):Integer;stdcall;external mydll.dll;


متن خطا :
the procedure entry pint could not be located in the dynamic link library


پيوست : any parameter* پارامترهاي مختلفي هست كه طولاني بود ننوشتم از روي سورس سي عينا جايگزين كردم ، كلا مشكلم نحوه صدا زدن تابع هست. چطوريه ؟
پيوست 2:
در سورس به اين صورت يك فايل .h هست و اينطوري ظاهرا لود شدند:



// dll declarations
#ifdef _MSC_VER
#ifdef DLL_CREATEOR
#define _exported __declspec(dllexport) // creator of dll
#else
#define _exported __declspec(dllimport) // user of dll
#endif
#else /* _MSC_VER */
#define _exported
#endif /* _MSC_VER */


توي دلفي چطوري بايداين DLL ها را استفاده كرد ؟

vcldeveloper
شنبه 22 مرداد 1390, 02:15 صبح
متن خطا :
the procedure entry pint could not be located in the dynamic link library
متن خطا که میگه تابع مربوطه در اون DLL پیدا نشده، پس اسمی که برای تابع قید کردید، درست نیست. می تونید محتوای کامل اون فایل h. رو اینجا بذارید؟ اینی که اینجا گذاشتید به نظر کامل نمیاد، فقط یک سری IFDEF هست، از تعریف تابع خبری نیست. قاعدتا بعد از اون __declspec باید تعریف تابع بیاد که خبری ازش نیست.

joker
شنبه 22 مرداد 1390, 03:22 صبح
در فايل .h فقط توي يك خط اسم تابع صدا زده شده :


_exported extern INT32 XMyFunction(any parameter);


اين كه چرا نام تابع بعد از كامپايل اينطوري شده عجيبه ، عكس ضميمه را ببينيد ، اكسپورت تيبل با lordPE

دستي هم نام را تغيير دادم ، ولي تعداد بينهايت ارور بهم داد نامرد :)
روشي هست كه بدون نام بر اساس ايندكس قرار گيري در جدول اكسپورت ازش استفاده كنم؟
پيوست : فايل .lib اون را هم دارم ، كمكي بهم ميكنه ؟

joker
شنبه 22 مرداد 1390, 04:15 صبح
الان با استفاده از اين ابزار export_viewer (http://www.nirsoft.net/utils/dll_export_viewer.html) كه فايل را باز كردم مثل بچه آدم ظاهرا تعريف شده !
اشكال كار من كجاست ؟
ميشه يك مثال ساده برام بزاريد با توجه به همين شكل توابع ؟

vcldeveloper
شنبه 22 مرداد 1390, 19:25 عصر
روشي هست كه بدون نام بر اساس ايندكس قرار گيري در جدول اكسپورت ازش استفاده كنم؟
بله:


function MyFunc: Integer; external 'MyLib.dll' Index 1;



الان با استفاده از اين ابزار export_viewer (http://www.nirsoft.net/utils/dll_export_viewer.html) كه فايل را باز كردم مثل بچه آدم ظاهرا تعريف شده !
اشكال كار من كجاست ؟
تابع به صورت cdecl تعریف شده، نه stdcall.


ميشه يك مثال ساده برام بزاريد با توجه به همين شكل توابع ؟


function XDeRegister(Param1: Cardinal; Param2: PAnsiChar; Param3: PInteger): Integer; cdecl; external 'MyDll.dll';

یا بر اساس ایندکس:


function XDeRegister(Param1: Cardinal; Param2: PAnsiChar; Param3: PInteger): Integer; cdecl; external 'MyDll.dll' Index 2;

joker
شنبه 22 مرداد 1390, 20:08 عصر
كيبوردت طلا :) روش ايندكس فقط جواب داد كه براي من كافي بود :قلب: