Calling a callback function in Delphi from a C++ DLL指针在Delphi
我坐在一个类似的错误一个C++的typedef回调过程不过我的C++的声明是有一点点不同。
typedef int __stdcall CALLBACK(void* pP1, int I1, unsigned char* pUC,
int I2, int I3, int I4, void* pP2);
我转换为:
type TCALLBACK = function(var pP1: Pointer; var I1: integer;
var pUC: PChar; var I2: Integer; var I3: Integer; var I4: Integer;
var pP2: Pointer): Integer cdecl stdcall;
功能引用回调温控功能:
int MyFunction(void* pP1, TCALLBACK* pCallback, void* pP2);
我转换为:
MyFunction: function(pP1: Pointer; var pCallBack: Pointer;
pP2: Pointer): Integer cdecl stdcall;
调用函数:
在德尔福宣布为var P : Pointer;
begin
//Addr
P := Addr(PCALLBACK); //had this as @PCALLBACK
UFS_StartCapturing(ScannerHandle, P, self);
end;
回调函数:
function MyCallback(var pP1: Pointer; var I1: integer; var pUC: PChar;
var I2: Integer; var I3: Integer; var I4: Integer;
var pP2: Pointer): Integer;
var
MainForm : TfrmMain;
begin
//Do your thing
end;
我知道自己的问题出在指针回调(CALLBACK *),并且现在想:
ADRESSOFCALLBACK= ^TCALLBACK;
MyFunction: function(pP1: Pointer; var pCallBack: ADRESSOFCALLBACK;
pP2: Pointer): Integer cdecl stdcall;
还没加工。
PCALLBACK应该是MyCallback。我不得不重新命名一些名称,因为头文件的发布者不允许公开发布它们的头源代码。 – StefandB 2014-10-01 16:43:03
当我添加MyFunction(ScannerHandle,MyCallback,self)时,编译器会给我E2033实际和正式var参数的类型必须相同,因为它需要一个指针。 – StefandB 2014-10-01 17:22:26
请使用我的答案中的代码。您的错误消息意味着在MyFunction中使用var参数。 – 2014-10-01 17:54:51