delphi offsetof , container_of 通过结构体成员获得到该结构体地址

2023-05-16

C宏 offsetof(type, member) 该结构体成员相对于该结构体的偏移量
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

那Delphi版的表示式怎么写呢

NativeUInt(@Record(nil^).member)

C宏 container_of() 通过结构体成员得到该结构体地址

那Delphi版的表示式怎么写呢

NativeUInt(@member)-NativeUInt(@Record(nil^).member)

例子如下:

 type
  TTestRecord=record
    a:Integer;
    b:Integer;
    c:string;
    d:string;
  end;

procedure TForm2.btn1Click(Sender: TObject);
var
  p,pb,pd:Pointer;
  t:TTestRecord;
  n:NativeUInt;
begin
  p:=@t;
  pb:=@t.b;
  pd:=@t.d;
  mmo1.Lines.Add('record addr:='+IntToStr(NativeUInt(p)));
  mmo1.Lines.Add('record.b addr:='+IntToStr(NativeUInt(pb)));
  mmo1.Lines.Add('record.d addr:='+IntToStr(NativeUInt(pd)));
  n:= NativeUInt(@TTestRecord(nil^).b);
  mmo1.Lines.Add('record.b len:='+IntToStr(n));
  n:= NativeUInt(@TTestRecord(nil^).d);
  mmo1.Lines.Add('record.d len:='+IntToStr(n));
  n:=NativeUInt(pb)-NativeUInt(@TTestRecord(nil^).b);
  mmo1.Lines.Add('record addr(Calculated by member b):='+IntToStr(n));
  n:=NativeUInt(pd)-NativeUInt(@TTestRecord(nil^).d);
  mmo1.Lines.Add('record addr(Calculated by member d):='+IntToStr(n));
end;

运行结果如下图

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

delphi offsetof , container_of 通过结构体成员获得到该结构体地址 的相关文章

  • 在主表单之前显示登录表单

    我在表单之间导航时遇到问题 我使用 Delphi XE5 创建了一个 Android Firemonkey 移动应用程序 我目前有一个登录表单和主表单 现在我想要有关如何处理登录表单以显示在主表单之前的建议 在 项目选项 中的表单下 选择要
  • iOS Objective-C 对象:何时使用release,何时不使用它

    我在 iOS 下 正在使用 delphi Tokyo 进行开发 这是我的代码 aUIImage TUIImage Wrap TUIImage alloc initWithCGImage aCGImageRef try aData TNSDa
  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • 调用泛型类型的方法?

    为什么下面的代码在 Delphi XE 中会产生错误 unit UTest interface type TTest class public procedure Foo
  • 如何追踪“地址 00000000”的访问违规

    我知道如何创建 map 文件来在错误消息包含实际地址时跟踪访问冲突错误 但是如果错误消息说怎么办 Access violation at address 00000000 Read of address 00000000 我从哪里开始寻找这
  • 如何向标准集合编辑器添加图标?

    我有一个自定义控件 它利用TCollection and TCollectionItem 在集合编辑器中 我想向每个列表项添加图标 该列表项由内部TImageList 在其父组件内 集合项本身代表图标 我想在这个编辑器中显示相应的图标 如何
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 如何从 Delphi 中的函数返回对象而不导致访问冲突?

    我有一个返回 TStringList 的 delphi 函数 但是当我返回一个值并尝试使用它时 我收到一个访问冲突错误 即 myStringList FuncStringList myStringList Items Count lt Th
  • 如何使用 Gmail 的 SMTP 和 Indy 10 发送电子邮件?

    我正在使用 Delphi 2009 和 svn 中最新的 Indy 10 通过 SMTP 发送电子邮件 但它不适用于 Gmail Google Apps 托管域 当我尝试发送电子邮件时 我收到 必须首先发出 STARTTLS 命令 我尝试用
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 对象的引用计数

    在我的代码中 我使用一个小的数据存储类 它是在不同的地方创建的 为了避免内存泄漏并简化事情 我想使用引用计数 所以我这样做了 type TFileInfo class TInterfacedObject IInterface 并删除了我对
  • 如何用不同的颜色绘制选定的列表框项目?

    是否可以更改 TListBox 中的项目选择焦点颜色和文本颜色 当项目中未启用主题或列表框样式设置为所有者绘制时 项目周围的选择将被涂成蓝色 我相信这是由系统的外观设置全局定义的 我想将所选项目的颜色更改为自定义颜色 举个例子 结果会是这样
  • 如何使用 FieldDefs 在运行时创建新的 SQLite 文件和表?

    我正在使用 Delphi Seattle 在全新的 SQLite 文件中创建一个全新的表 并且仅使用 FieldDefs 和非可视代码 我可以使用 ExecSQL CREATE TABLE 语法创建一个表 但不能如下所示 我得到 没有这样的
  • 防止多个实例 - 但还要处理命令行参数?

    我正在从我的应用程序处理与 Windows 相关的扩展文件 因此 当您在 Windows 中双击文件时 它将执行我的程序 然后我从那里处理该文件 如下所示 procedure TMainForm FormCreate Sender TObj
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • logback的“谨慎模式”是如何实现的?

    The 审慎模式 http logback qos ch manual appenders html prudentlogback 中的序列化所有 JVM 之间的 IO 操作 写入同一文件 可能运行在不同的主机上 在其他日志记录框架中 如果
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 如何在Delphi中将对象方法作为参数传递,然后调用它?

    我担心这可能是一个有点愚蠢的问题 但这让我很难过 我正在寻找将对象的方法传递到过程中的最简单的方法 以便过程可以调用对象的方法 例如 超时后 或者可能在不同的线程中 所以基本上我想 捕获对对象方法的引用 将该引用传递给过程 使用该引用 从过
  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls

随机推荐

  • android开发中的数据库SQLite的使用

    其实学习android很久了 xff0c 关于数据存储 xff0c 之前学习的时候也一同学习过 xff0c 编程这些东西很久没用都忘得差不多了 xff0c 最近做个项目要用到 xff0c 所以又学习了一遍 android中关于数据的存储有好
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自
  • SQLiteOpenHelper使用详解

    SQLiteOpenHelper 的子类 xff0c 至少需要实现三个方法 xff1a 1 构造函数 调用父类 SQLiteOpenHelper 的构造函数 这个方法需要四个参数 xff1a 上下文环境 xff08 例如 xff0c 一个
  • SQLiteOpenHelper的简单使用

    由于想学习GreenDao框架 xff0c 但是看了一下有的蒙圈 xff0c 所以先熟悉一下android原生的SQLiteOpenHelper的使用工具 xff1a SQLite Expert Personal SQLite Expert
  • android SQLiteOpenHelper 使用

    1 实体 package mydemo mycom demo2 entity public class UserInfo private int id private String username private String passw
  • SQLiteOpenHelper的简单使用

    由于想学习GreenDao框架 xff0c 但是看了一下有的蒙圈 xff0c 所以先熟悉一下android原生的SQLiteOpenHelper的使用 工具 xff1a SQLite Expert Personal SQLite Exper
  • 安卓案例:利用SQLiteOpenHelper操作数据库及表

    安卓案例 xff1a 利用SQLiteOpenHelper操作数据库及表 一 运行效果 二 涉及知识点 1 利用SQLiteOpenHelper类创建与升级数据库 这个类是一个抽象类 xff0c 我们必须继承该类创建一个子类 xff0c 实
  • delphi SimpleGraph控件的部分注释

    TSimpleGraph是一个delphi下的可视化图形开源控件 xff0c 有很强编辑态和运行态编辑功能 是学习开发DELPHI控件的一个很好的例子 控件本身有很强的扩展性 完全可以自定义绘制各种图形 控件的地址为http www del
  • java获取实体类的属性和值

    package com jackie day11 import java lang reflect Field import java lang reflect InvocationTargetException import java l
  • Android USB 开发详解

    Android USB 开发详解 先附上 Android USB 官方文档 Android通过两种模式支持各种 USB 外设和 Android USB 附件 xff08 实现Android附件协议的硬件 xff09 xff1a USB附件和
  • Android USB串口开发

    因为第一次接触Android下的串口开发 xff0c 在网上找了很多例子都不能满足自己的需要以及不能正常使用 xff0c 于是结合网上的资源以及查阅资料 xff0c 终于完成了关于这个串口的开发 xff0c 在此记录下usb转串口通信开发的
  • Android USB转串口通信开发实例详解

    好久没有写文章了 xff0c 年前公司新开了一个项目 xff0c 是和usb转串口通信相关的 xff0c 需求是用安卓平板通过usb转接后与好几个外设进行通信 xff0c 一直忙到最近 xff0c 才慢慢闲下来 xff0c 趁着这个周末不忙
  • Android USB转串口编程

    安卓手机的对外通信接口就只有USB跟音频口 xff0c 我们可采用其进行与外设进行通信 今天 xff0c 我们来讲讲安卓手机利用USB接口与外设进行通信 此时 xff0c 有两种情况 第一 xff1a USB xff08 手机 xff09
  • Android串口编程--开关灯Demo(附源码)

    1 项目简述 第二次玩硬件了 xff0c 第一次是通过局域网控制门的开关 xff0c 这次是通过ZB xff08 大概就是这么叫 xff0c 具体名字不清楚 xff09 控制灯的开关 xff0c 感觉控制硬件也就是给硬件发个byte数组而已
  • 安卓开发中的USB转串口通讯

    安卓开发中的USB转串口通讯 本文使用GitHub上开源的 hoho android usbserial USB串口库 该库基于 Android USB Host API xff0c 驱动完全由java开发 xff0c 无需root xff
  • Android USB转串口开发(hoho.android.usbserial串口库)

    使用hoho android usbserial串口库开发串口 import android app Application import android app PendingIntent import android content B
  • 安卓数据库开发helper

    package com mytest myapplication public class MyInfo public MyInfo int id String name String value ID 61 id Name 61 name
  • Android 在布局容器中动态添加控件

    这里 xff0c 通过一个小demo xff0c 就可以掌握在布局容器中动态添加控件 xff0c 以动态添加Button控件为例 xff0c 添加其他控件同样道理 1 addView 添加控件到布局容器 2 removeView 在布局容器
  • delphi offsetof , container_of 通过结构体成员获得到该结构体地址

    C宏 offsetof type member 该结构体成员相对于该结构体的偏移量 define offsetof TYPE MEMBER size t amp TYPE 0 gt MEMBER 那Delphi版的表示式怎么写呢 Nativ