const 记录参数的 [Ref] 属性有用吗?

2024-03-14

对于最新的 Delphi 版本(Berlin/10.1/24), [Ref] 属性真的有必要吗?

我问这个是因为在线文档 http://docwiki.embarcadero.com/RADStudio/Berlin/en/Parameters_(Delphi)#Constant_Parameters says:

常量参数可以通过值或通过方式传递给函数 参考,取决于所使用的具体编译器。为了强制 编译器通过引用传递常量参数,可以使用 [Ref] 带有 const 关键字的装饰器。


这与文档中描述的非常相似。你会用[ref]如果您有理由强制参数通过引用传递。我能想到的一个例子是互操作。假设您正在调用一个定义如下的 API 函数:

typedef struct {
    int foo;
} INFO;

int DoStuff(const INFO *lpInfo);

在 Pascal 中,您可能希望像这样导入它:

type
  TInfo = record
    foo: Integer;
  end;

function DoStuff(const Info: TInfo): Integer; cdecl; external libname;

但是因为TInfo如果很小,编译器可能会选择按值传递结构。所以你可以用注释[ref]强制编译器将参数作为引用传递。

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

const 记录参数的 [Ref] 属性有用吗? 的相关文章

  • 如何解决内存分段并强制FastMM释放内存给OS?

    注意 32 位应用程序不计划迁移到 64 位 我正在使用一个非常消耗内存的应用程序 并且几乎优化了与内存分配 取消分配相关的所有相关路径 应用程序本身没有内存泄漏 没有句柄泄漏 没有任何其他类型的泄漏 据我所知并经过测试 我无法触及的第 3
  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • XE2 中的 COM 是否损坏?我该如何解决它?

    Update XE2 Update 2 修复了下述错误 下面的程序是从实际程序中截取的 在 XE2 中失败并出现异常 这是 2010 年的回归 我没有 XE 来测试 但我希望该程序在 XE 上运行良好 感谢 Primo 确认代码在 XE 上
  • 在 Delphi 中强制非阻塞临时提示窗口

    我一直在寻找 但找不到解决方案 所以我想也许我应该简单地发布它 这是我想要在 Delphi 2009 中做的事情 在我的应用程序中的某个时刻 我想向用户显示一条消息 这应该是正常的提示窗口 在正常应用程序定义的提示暂停后自动消失 并带有自定
  • Delphi 如何与 Active Directory 集成?

    我们需要使用 Delphi 7 验证 Microsoft Active Directory 上的用户 最好的方法是什么 我们可以有两种情况 用户输入其网络用户名和密码 其中用户名可能包括域 然后我们检查活动目录是否是有效的活动用户 或者我们
  • 如何更新Delphi对象检查器?

    继我最近发布的这个问题之后 组件编辑器可以在多个组件上执行吗 https stackoverflow com questions 14802371 can a component editor be executed on multiple
  • 如何将我的图标添加到组件选项板页面中的组件? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi非可视化组件图像 https stackoverflow com questions 3319276 delphi non visual component image 如何将我的图标添加
  • 加载 Jpg/Gif/Bitmap 并转换为 Bitmap

    我必须从 XML 文件加载图像 XML 文件中没有关于图像是否为 JPG GIF BMP 的信息 加载图像后 我需要将其转换为位图 有谁知道如何在不知道实际文件格式的情况下将图像转换为位图 我正在使用 Delphi 2007 2009 谢谢
  • Delphi TImageList 位图更改

    我正在使用 Delphi XE2 Update 3 Update 4 与我们的一些第 3 方组件不兼容 因此我们尚未更新 我在我的应用程序中使用 TImageList 我注意到很多时候当它从源视图切换到表单视图 F12 时 突然之前未修改的
  • delphi 变量值在循环中的线程中发生变化

    我的代码正在运行一个 for 循环来处理一些数据 如下所示 procedure printValue Value Integer begin TThread Synchronize TThread Current procedure beg
  • 如何避免使用 WinApi.Windows 的 Delphi 应用程序中的 dll 劫持

    Delphi 最新版本使用各种系统 dll 的静态链接 例如 WinApi Windows 单元中的 version dll 这会导致在单元初始化之前加载 version dll 这会打开一个安全漏洞 可以通过将受感染的 version d
  • 运行delphi客户端自动化程序后excel.exe保持加载状态的原因是什么?

    我编写了一个 Delphi 程序 该程序从单个 XLS 文件的多个不同电子表格中提取数据并将其合并到文本文件中以供以后处理 这是德尔福7console程序 最相关的代码片段的摘录将向您表明 显然 我的程序表现得相当好 或者至少达到了它需要的
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • delphi中如何实现多重继承?

    我正在对一个旧库进行完全重写 我不确定如何处理这种情况 为了便于理解 大家都欢呼自行车类比 我有以下课程 TBike 自行车本身 TBikeWheel 自行车的一个轮子 TBikeWheelFront and TBikeWheelBack
  • 将数据从一个数据集结构移动到另一个数据集结构的更快方法(在 TDatasetProvider 中)

    我有一个自定义的 TDatasetProvider 它允许为其提供的任何数据创建新字段 因此 假设您在原始数据集上获得了以下字段 客户ID Name Age 您需要使用显示位图在 DBGrid 上选择它 好吧 你可以 因为我的 DSP 可以
  • Delphi IDE导致CPU过热

    我正在使用 Delphi 7 但我已经尝试过 Delphi 2005 2010 版本 在所有这些新版本中 当 Delphi IDE 在屏幕上可见时 我的 CPU 利用率为 50 一个核心为 100 另一个核心为 宽松 当 IDE 最小化时
  • 如何更改 TPageControl 上标签的方向?

    我是 Delphi 的新手 再次强调 我在 1994 年就使用过 Delphi 我现在有 Delphi 2009 Pro 来自Java 我发现对象继承非常晦涩 我的用户想要选项卡位于左侧的选项卡式页面 但是 TPageControl 不允许

随机推荐

  • 移动 Numpy 数组的最快方法

    我正在运行一些模拟 其中涉及反复将 2D Numpy 数组中的值与其 邻居 进行比较 例如 索引位置的值 y x 与索引位置的值进行比较 y 1 x 来自同一个数组 目前我正在使用这样的函数 example of the typical s
  • 扩展显示上的 Eclipse 缩放问题

    我的设置是一台戴尔 XPS 13 笔记本电脑 3200 x 1800 Windows 10 两台扩展显示器 1680x1050 通过戴尔 Thunderbolt 坞站连接到笔记本电脑 我的问题是在xps13 eclipse上显示正常 但在扩
  • 错误:System.Environment.SpecialFolder”不包含“CommonApplicationData”的定义

    我有将文件保存在目录中的文件夹中的代码 string timestamp DateTime Now ToString MM dd yyyy HH mm ss var file File Create Owe Data txt timesta
  • 如何将 getimagesize() 与 $_FILES[''] 一起使用?

    我正在做一个图像上传处理程序 我希望它能够检测用户上传的图像的尺寸 所以我从以下开始 if isset FILES image etc 我有 list width height getimagesize 我应该如何一起使用它们 多谢 你可以
  • 使用 MVC3/.NET 异步文件上传器?

    大家 我是一名学生 对 NET 特别是 MVC3 开发很陌生 目前 在我的一个项目部分中有一个表单 其中包含几个文本字段和两个文件输入 考虑到上传的文件可能很大 我想使用异步文件上传器 它可以显示文件上传的进度 这样用户在后面上传文件时就不
  • 从证书中读取备用名称

    我想编写一段代码来读取用户主体名称来自其他名称 under 科目选择证书上的名称 我有 X509 证书 我做了 证书是 X509Certificate 对象 Collection san certificate getSubjectAlte
  • 远程连接到 Amazon RDS MySql

    我正在尝试从我的计算机连接到 Amazon RDS 上的 MySql 使用MySql WorkBench or HeidiSql甚至是console Mysql exe我一直收到这个错误 ERROR 2003 HY000 Can t con
  • 当一个接口“继承”另一个接口时,您怎么称呼它?

    如果我有 B 类 A 我说 B类遗传A 类 或 B 类派生自 A 类 但是 如果我有 class B ISomeInterface 说 B继承ISomeInterface 是错误的 正确的说法是 B实施ISomeInterface 但是 说
  • scipy.curve_fit() 返回多行

    我是 python 新手 尝试使用以下代码来适应数据集分布 实际数据是一个包含两列的列表 预测市场价格和实际市场价格 我试图使用scipy curve fit 但它给了我在同一个地方绘制的许多线条 任何帮助表示赞赏 import the n
  • 我可以从 Dapper 查询返回多个派生类型的集合吗

    我有一个与此类似的类结构 public abstract class Device public int DeviceId get set Additional Properties public class DeviceA Device
  • Mysql:将 NOT NULL 列更新为 null 时未收到错误

    为什么mysql在更新非空列时接受空数据 然后将数据转换为0 我期待一个错误 但它没有显示出来 如果有人尝试将非空列更新为空 我如何得到错误 我需要它 以便在出现错误时可以回滚事务 数据库中是否需要任何配置来执行此操作 谢谢 您还没有指定您
  • 如何正确检索表 ID

    根据数据库理论 数据库中的任何表都可以通过其完全限定名称来成功识别 catalog name schema name table name 在 SQL Server 中检索表 id 的方法是 SELECT object id table n
  • 默认移动构造函数与默认复制构造函数与默认赋值运算符

    为什么 C 编译器对自动生成的移动构造函数比对自动生成的复制构造函数或赋值运算符有更多限制 仅当用户未定义任何内容时 才会生成自动生成的移动构造函数 即 构造函数 复制 赋值 析构函数 仅当用户未分别定义复制构造函数或赋值运算符时 才会生成
  • 日期查询适用于 _id 但不适用于日期值 - MongoDB

    所以 我几个小时以来一直在尝试 但没有得到任何结果 我有一个 MongoDB 集合 它有一个日期值 scrape systemTime 我将其插入scrape systemTime new Date 我试图通过使用以下方法获得早一周的结果
  • 与逃亡者一起离开差异视图

    有了 vim 逃亡者 有没有一种简单的方法来 取消分割 Gedit 返回工作树中的当前对象 E g when in Gcommit Gstatus buffers you would press D to enter side by sid
  • 嵌入式使用的轻量级(解)压缩算法

    我有一个带有图形用户界面的低资源嵌入式系统 该界面需要字体数据 为了节省只读存储器 闪存 需要压缩字体数据 我正在寻找一种用于此目的的算法 要压缩的数据的属性 每个像素 8 位的矩形像素图的透明度数据 字体中通常有大约 200 300 个字
  • 我该如何解决这个警告? “遇到两个拥有相同钥匙的孩子`.$1/.$2`”

    我正在使用导入 react native form select picker 在我的反应本机应用程序中进行选择输入 并且代码工作正常 但它仍然给我一个警告 遇到两个具有相同密钥的孩子 1 2 那么我该如何解决这个问题有人可以帮忙吗 下面是
  • C 标准库函数名称中的“f”代表什么?

    什么是fC 标准库函数的名称代表什么 我注意到很多函数都有一个f以他们的名义 这对我来说真的没有意义 例如 fgets fopen printf scanf sqrtf等等 你的问题总体来说太笼统了 但我可以解释一些例子 fgets htt
  • 在不同列中显示列表项元素

    我正在尝试更改 DataLife Engine 模板的外观 我想知道您是否可以帮助我进行对齐 我有一列显示一些信息 如下所示 div class short description div class table ul class tabl
  • const 记录参数的 [Ref] 属性有用吗?

    对于最新的 Delphi 版本 Berlin 10 1 24 Ref 属性真的有必要吗 我问这个是因为在线文档 http docwiki embarcadero com RADStudio Berlin en Parameters Delp