我想得到一个结构/记录的“位置”. 说我有这个记录: 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));