我在Delphi XE2程序中使用C DLL沒有問題。其中一個DLL函數將函數作爲參數。在C DLL中使用delphi回調函數
下面是函數的原型:
var
LMX_MySetOption: function(LmxHandle: LMX_HANDLE;
eOption: _LMX_SETTINGS;
callback: TCallBackProcedure): LMX_STATUS cdecl
{$IFDEF WIN32} stdcall {$ENDIF};
原始原型中的函數的C爲:
LMX_STATUS LMX_SetOption(LMX_HANDLE LmxHandle, LMX_SETTINGS eOption,
const void *pSetting);
TCallBackProcedure定義如下:
type
TCallBackProcedure = procedure(bla : Pointer) stdcall;
我這樣調用函數:
LMX_MySetOption(LmxHandle, LMX_OPT_HEARTBEAT_EXIT_FUNCTION, UserExitRoutine);
的UserExitRoutine是definede如下:
procedure UserExitRoutine(bla : Pointer) stdcall;
begin
...
end;
它不工作(訪問衝突) 我不能修改C DLL。
非常感謝您的任何想法!
' TCallbackProcedure'和'const void * pSetting'在我看來並不匹配。 –