Delphi中调C DLL 回调函数
C DLL中:
回调函数的指针类型定义
typedef void (_stdcall* MSGCALLBACK)(Event event);
导出函数
__declspec(dllexport) void __cdecl SetPeekMsgFun(MSGCALLBACK pCallBack);
Delphi中:
回调函数的指针类型定义
type
TCallBackFunc = function (event: EM_Event):Integer of object;
回调函数声明
function MessageControl(event: EM_Event):Integer; stdcall;
回调函数实现
function MessageControl(event: EM_Event):Integer;
begin
MessageBox(HWND(nil),'MsgCtrl','Callback', MB_OK);
Result := 0;
end;
调用
callbackFun: ^TCallBackFunc;
callbackFun := @MessageControl;
SetPeekMsgFun(callbackFun^);
出错
Compile无错
运行,当有 event 时, 弹出"Debugger Fault Notification" 对话框, 信息是"...\demoDelphi.exe faulted with message:'application-defined exception(code 0x000001e) at 0x0012ffad'. Process Stopped. Use Step or Run to continue."
我跟踪过了,0x0012ffad是MessageControl函数的首地址, C++程序员写SDK的Delphi实例,请高手指教!谢谢!