,c++,delphi,dll,delphi-7,C++,Delphi,Dll,Delphi 7" /> ,c++,delphi,dll,delphi-7,C++,Delphi,Dll,Delphi 7" />

从C+;调用Delphi中的回调函数+;动态链接库 我有一个C++ DLL,我写的是一个单一的外露函数,它把函数指针(回调函数)作为参数。p> #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函数一起工作。p>

从C+;调用Delphi中的回调函数+;动态链接库 我有一个C++ DLL,我写的是一个单一的外露函数,它把函数指针(回调函数)作为参数。p> #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函数一起工作。p>,c++,delphi,dll,delphi-7,C++,Delphi,Dll,Delphi 7,在这个问题上,我得到了帮助 我正在构建C++ DLL,如果需要的话,我可以改变它的参数。p> 我的问题是: 如何在Delphi中创建函数指针 如何正确调用来自Delphi应用程序中的暴露的C++ DLL函数,使C++ DLL函数可以使用函数指针。李> 通过声明函数类型在Delphi中声明函数指针。例如,回调函数类型的定义如下: 类型 TGetProperty=函数(对象类型、对象说明、属性标识符、设备标识符:UInt;值:PSingle):布尔;cdecl; 注意,调用约定是“代码> CDE

在这个问题上,我得到了帮助

<>我正在构建C++ DLL,如果需要的话,我可以改变它的参数。p> 我的问题是:

  • 如何在Delphi中创建函数指针
  • 如何正确调用来自Delphi应用程序中的暴露的C++ DLL函数,使C++ DLL函数可以使用函数指针。李>
通过声明函数类型在Delphi中声明函数指针。例如,回调函数类型的定义如下:

类型
TGetProperty=函数(对象类型、对象说明、属性标识符、设备标识符:UInt;值:PSingle):布尔;cdecl;
<>注意,调用约定是“代码> CDECL < /Cord>”,因为C++代码没有指定调用约定,CDECL是C++编译器常用的默认调用约定。 然后可以使用该类型定义DLL函数:

函数寄存器callbackgetProperty(GetProperty:TGetProperty):布尔值;cdecl;外部“dllname”;
用DLL的名称替换
'dllname'

要调用DLL函数,首先应该有一个签名与回调类型匹配的Delphi函数。例如:

函数回调(对象类型、对象说明、属性标识符、设备标识符:UInt;值:PSingle):布尔cdecl;
开始
结果:=假;
结束;
然后,您可以调用DLL函数并像传递任何其他变量一样传递回调:

RegisterCallbackGetProperty(回调);