【发布时间】:2019-06-26 17:22:52
【问题描述】:
在这里使用 Delphi 7。当我获取一个过程的地址(目的是将此方法地址作为回调发送到外部 C++ DLL)时,Delphi 7 编译器会报告Variable required。为什么?有无参数列表如何获取方法的地址?
这是显示编译器错误的简化代码。
// ...
type
PTProcedureCallback = ^TProcedureCallback;
TProcedureCallback = procedure() of object;
// ...
TTestCallback = class
constructor Create();
procedure MyCallback();
end;
//...
implementation
constructor TTestCallback.Create();
var
pCallback: PTProcedureCallback;
begin
// Constructor
inherited;
// Test callback
pCallback := @MyCallback; // <- [Error] Variable required
end;
procedure TTestCallback.MyCallback();
begin
// Do something
end;
end;
【问题讨论】:
-
您不能将方法指针(类的方法)传递给 C++ DLL,因为它有一个隐含的
Self引用与它一起传递,而 C++ DLL 无法理解。procedure of object表示它将具有Self引用。 (这里不是问题的答案,但它会节省你在未来试图弄清楚为什么一旦你弄清楚它就不起作用的时间。)