如果它是一个过程或函数指针,我如何获取字段的地址?

Mak*_*see 5 delphi data-structures

我必须做一些记录子数据大小计算,所以创建了类似的东西

function GetSubDataSize(const Rec: TRecord): integer;
begin
  Result:=integer(@Rec.Field2) - integer(@Rec.Field1);
end;
Run Code Online (Sandbox Code Playgroud)

除了一种情况,如果Field中的一个是一个过程或函数指针,那么一切都很好,所以如果是

TRecord = record
   Field2: procedure(Sender: TObject) of object;
end;
Run Code Online (Sandbox Code Playgroud)

该函数获取过程本身的地址.有没有办法对字段进行类型转换以获取字段的地址而不是函数的地址?我知道我可以使用变体部分记录来解决它,但只是不想使用它.

谢谢,

马克斯

Nat*_*Nat 11

你有没有尝试过 @@?

type
  TRecord = record
    Field1:integer;
    Field2:TNotifyEvent;
  end;

function GetSubDataSize(const Rec: TRecord): integer;
begin
  result := integer(@@Rec.Field2) - integer(@Rec.Field1);
end;
Run Code Online (Sandbox Code Playgroud)

给我8,这是我对Delphi 2010的期望.

N - [

  • +1 - 来自文档(程序类型):"要获取程序变量的内存地址(而不是存储在其中的地址),请使用@@." (6认同)