呼叫的是PTKAlarmSDK.dll
#ifdef PTKALARMLIB_EXPORTS
#define PTKALARMLIB_API extern "C" __declspec(dllexport)
#else
#define PTKALARMLIB_API extern "C" __declspec(dllimport)
#endif
宣告回呼函式
typedef struct
{
void ( *PTK_UserCommandSuccessful )( const void *sender,uint receid,uchar hostid,uchar terid,uchar commandcode);
void ( *PTK_UserCommandDelete )( const void *sender,uint receid,uchar hostid,uchar terid,uchar commandcode);
void ( *PTK_Alarm_Information )( const void *sender,uint receid,uchar hostid,uchar terid,uchar areaid);
void ( *PTK_Alarm_KpdDisplay )( const void *sender,uint receid,uchar hostid,uchar *Dis1,uchar *Dis2);
}SPTK_callbackFun;
定義一個dll介面函式
PTKALARMLIB_API void *Init_PTKAlarmlib(const void *sender,SPTK_callbackFun *CallBack);
最后怎么呼叫這個介面函式
uj5u.com熱心網友回復:
哈哈,老實說,不好意思,我目前delphi都還是半吊子.我看不懂,我來接點分,以便我后續提問,呵呵!uj5u.com熱心網友回復:
delphi呼叫dll函式的方式:function Sub_Add(const id: integer): Integer; stdcall; external 'login.dll';
宣告一個函式,引數型別跟dll中的相同,后面加 stdcall 再加 external ,后面接dll檔案名,可以指定位置 如“c:\login.dll”
uj5u.com熱心網友回復:
別誤匯入家,如果樓主所說的DLL真是C方式而宣告又像樓所貼出來的所示的話
#ifdef PTKALARMLIB_EXPORTS
#define PTKALARMLIB_API extern "C" __declspec(dllexport)
#else
#define PTKALARMLIB_API extern "C" __declspec(dllimport)
#endif
C的默認呼叫約定是__cdecl,你上面的DLL匯出說明沒看到有stdcall,或者是有def,而且你的結構
typedef struct
{
void ( *PTK_UserCommandSuccessful )( const void *sender,uint receid,uchar hostid,uchar terid,uchar commandcode);
void ( *PTK_UserCommandDelete )( const void *sender,uint receid,uchar hostid,uchar terid,uchar commandcode);
void ( *PTK_Alarm_Information )( const void *sender,uint receid,uchar hostid,uchar terid,uchar areaid);
void ( *PTK_Alarm_KpdDisplay )( const void *sender,uint receid,uchar hostid,uchar *Dis1,uchar *Dis2);
}SPTK_callbackFun;
四個函式指標也應該有相應呼叫約定的指示,這個你得詳細問問DLL的作者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/107238.html
