从C ++ DLL调用Delphi中的回调函数 [英] Calling a callback function in Delphi from a C++ DLL
问题描述
我有一个C ++ DLL,我写了一个暴露的函数,它接受一个函数指针(回调函数)作为参数。
I have a C++ DLL that I wrote that has a single exposed function, that takes a function pointer (callback function) as a parameter.
#define DllExport extern "C" __declspec( dllexport )
DllExport bool RegisterCallbackGetProperty( bool (*GetProperty)( UINT object_type, UINT object_instnace, UINT property_identifer, UINT device_identifier, float * value ) ) {
// Do something.
}
我希望能够在Delphi中调用这个暴露的C ++ DLL函数应用程序并注册将在以后使用的回调函数。但是我不确定如何在Delphi中创建一个函数指针,它将使用暴露的C ++ DLL函数。
I want to be able to call this exposed C++ DLL function from within a Delphi application and register the callback function to be used at a future date. But I am unsure of how to make a function pointer in Delphi that will work with the exposed C++ DLL function.
我有 Delphi应用程序调用一个简单的暴露c ++ DLL函数从帮助我在这个问题。
I have the Delphi application calling a simple exposed c++ DLL functions from the help I got in this question.
我正在构建C ++ DLL,如果需要,我可以更改其参数。
I am building the C++ DLL and I can change its parameters if needed.
我的问题是:
- 如何在Delphi中创建函数指针
- 如何在Delphi应用程序中正确调用暴露的C ++ DLL函数,以便C ++ DLL函数可以使用函数指针。
推荐答案
通过声明函数类型在Delphi中声明函数指针。例如,您的回调的函数类型可以定义如下:
Declare a function pointer in Delphi by declaring a function type. For example, the function type for your callback could be defined like this:
type
TGetProperty = function(object_type, object_instnace, property_identifier, device_identifier: UInt; value: PSingle): Boolean; cdecl;
注意调用约定是 cdecl
然后你可以使用这个类型来定义DLL函数:
Then you can use that type to define the DLL function:
function RegisterCallbackGetProperty(GetProperty: TGetProperty): Boolean; cdecl; external 'dllname';
将'dllname'
替换为您的DLL。
要调用DLL函数,应首先使用一个与回调类型匹配的签名的Delphi函数。例如:
To call the DLL function, you should first have a Delphi function with a signature that matches the callback type. For example:
function Callback(object_type, object_instnace, property_identifier, device_identifier: UInt; value: PSingle): Boolean cdecl;
begin
Result := False;
end;
然后你可以调用DLL函数并传递回调,就像任何其他变量: p>
Then you can call the DLL function and pass the callback just as you would any other variable:
RegisterCallbackGetProperty(Callback);
这篇关于从C ++ DLL调用Delphi中的回调函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!