当前位置 : 主页 > 编程语言 > delphi >

delphi – 获取struct var AKA的位置记录字段的偏移量

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想得到一个结构/记录的“位置”. 说我有这个记录: type MyStruct = record MyInteger : Integer; MyInteger2 : Integer; MyInteger3 : Integer; MyFunc : function (FirstParam : WideString; SecondParam : String) : Integer; My
我想得到一个结构/记录的“位置”.

说我有这个记录:

type
  MyStruct = record
    MyInteger   : Integer;
    MyInteger2  : Integer;
    MyInteger3  : Integer;
    MyFunc      : function (FirstParam : WideString; SecondParam : String) : Integer;
    MyString    : String;
    MyString2   : WideString;
    MyPchar     : pchar;
end;

如您所见,此记录的大小为28字节(7个字符x 4个字节).基本上因为所有变量都是4字节变量(如整数)或指针(也是4字节).
现在假设我们将这个结构加载到一个内存地址(X = 0)(这也意味着MyInteger的地址为0).
MyInteger3(例如)的地址为8(注意X = 0!)
如何动态获取结构的位置(数字/地址)?

希望你们知道我的意思吗?
提前致谢.

BTW:
任何Var在结构中总是4个字节吗?
编辑:
如果您修复了spcae,这是错误的:String [100]

您可以使用某些指针算法获取任何记录成员的偏移量:

type
  PMyStruct = ^MyStruct;

var
  Offset: Integer;
begin
  Offset := Integer(@(PMyStruct(nil).MyInteger3));
  // or:
  // Offset := Integer(Addr(PMyStruct(nil).MyInteger3));
end;

如果你想要函数的偏移量,你需要像这样编码:

Offset := Integer(@@PMyStruct(nil).MyFunc);
// or:
// Offset := Integer(Addr(@PMyStruct(nil).MyFunc));
网友评论