![](/img/trans.png)
[英]How to create a file in delphi pass it to a C DLL and use the file in a callback?
[英]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.