Delphi中如何查询结构体变量中类似位置记录字段的偏移量?
- 内容介绍
- 文章标签
- 相关推荐
本文共计341个文字,预计阅读时间需要2分钟。
我想得到一个结构/记录的位置。告诉我这个记录:
type MyStruct=record MyInteger: Integer; MyInteger2: Integer; MyInteger3: Integer; MyFunc: function(FirstParam: WideString; SecondParam: String): Integer;end;
MyStruct MyInteger: 123 MyInteger2: 456 MyInteger3: 789 MyFunc: 返回值
我想得到一个结构/记录的“位置”.说我有这个记录:
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));
本文共计341个文字,预计阅读时间需要2分钟。
我想得到一个结构/记录的位置。告诉我这个记录:
type MyStruct=record MyInteger: Integer; MyInteger2: Integer; MyInteger3: Integer; MyFunc: function(FirstParam: WideString; SecondParam: String): Integer;end;
MyStruct MyInteger: 123 MyInteger2: 456 MyInteger3: 789 MyFunc: 返回值
我想得到一个结构/记录的“位置”.说我有这个记录:
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));

