簡體   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