加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:09:32 所属栏目:大数据 来源:网络整理
导读:我想得到一个结构/记录的“位置”. 说我有这个记录: type MyStruct = record MyInteger : Integer; MyInteger2 : Integer; MyInteger3 : Integer; MyFunc : function (FirstParam : WideString; SecondParam : String) : Integer; MyString : String; MyStr
我想得到一个结构/记录的“位置”.

说我有这个记录:

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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读