繁体   English   中英

在C dll中使用delphi回调函数

[英]using a delphi callback function in a C dll

我在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。

非常感谢您的任何想法!

如果是C过程,请不要使用stdcall,而应使用cdecl。

你可以简单地声明这个

 function LMX_MySetOption(LmxHandle: LMX_HANDLE;
                             eOption: _LMX_SETTINGS;
                            callback: Pointer): LMX_STATUS;cdecl;external 'yourmodule.dll'; 

procedure callback(bla:Pointer);cdecl;
begin
   //Some code
end;

LMX_MySetOption(LmxHandle, LMX_OPT_HEARTBEAT_EXIT_FUNCTION, @callback);

它应该可以工作...如果不是,您可能不知道函数具有的确切参数nr ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM