【发布时间】:2011-10-19 13:30:04
【问题描述】:
我在 Delphi XE2 程序中使用 C dll 没有问题。其中一个 DLL 函数将函数作为参数。
这是函数的原型:
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 定义如下:
procedure UserExitRoutine(bla : Pointer) stdcall;
begin
...
end;
它不起作用(访问冲突) 我无法修改 C dll。
非常感谢您的任何想法!
【问题讨论】:
-
TCallbackProcedure和const void *pSetting在我看来并不匹配。