Delphi函数的out、var等关键字的作用,和使用场景

问题描述

Delphi函数的out、var等关键字的作用,和使用场景

Delphi函数的out、var等关键字的作用,和使用场景,我知道var是作为传值调用,但是像out这个关键字又是什么作用呢?

解决方案

在过程或函数中,out主要用于COM和CORBA技术,Delphi解释:

An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input.

关键就是“它唯一的用处就是让写过程的程序员提醒一下,这个参数没有什么初始值的,只能给它赋值,而永远不要去用它的值。”

1、相同:var与out修饰的参数,都是通过指针引导的变量参数;它们都可以外出输出值;
2、区别:var修饰的参数,可以带入值,并在过程或函数使用;Out修饰的参数,带入值无效。out传递给过程的实际参数不必进行初始化。 
在过程或函数中,out主要用于COM和CORBA技术,Delphi解释:

An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn't provide any input.

关键就是“它唯一的用处就是让写过程的程序员提醒一下,这个参数没有什么初始值的,只能给它赋值,而永远不要去用它的值。”

1、相同:var与out修饰的参数,都是通过指针引导的变量参数;它们都可以外出输出值;
2、区别:var修饰的参数,可以带入值,并在过程或函数使用;Out修饰的参数,带入值无效。out传递给过程的实际参数不必进行初始化。

解决方案二:

out是向外传值,一个函数只有一个返回值,你可以用out把参数当作返回值使用。和var不同,var调用前必须先初始化,而out不需要。

解决方案三:

out只向外面发送,Var可以回传,也可以传入。貌似就这个区别

来源:https://yq.aliyun.com/wenzhang/show_40884

转载于:https://www.cnblogs.com/railgunman/p/8627572.html

C#与C++混合编程实战:P/Invoke调用DLL全解析 在软件开发中,动态链接库(DLL)是实现代码复用和模块化的重要技术,其原理在于将可执行代码封装为独立的二进制模块,供主程序在运行时调用。这种技术价值在于能有效分离核心功能与业务逻辑,便于团队协作和性能优化。通过平台调用服务(P/Invoke),托管代码(如C#)可以安全高效地调用非托管DLL(如C++编写)中的函数,实现跨语言互操作。这在桌面应用、游戏引擎、工业控制等对性能有苛刻要求的场景中尤为关键,能充分发挥C#的开发效率与C++的执行性能优势。本文以DLL调用和Visual Studio环境配置为核心, 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 20

GPU 训练中的各种算子融合技巧、梯度压缩与稀疏通信的高级变体、混合专家模型的负载均衡与通信优化、长序列模型的注意力机制优化、模型量化与蒸馏的联合优化、分布式训练中的容错与恢复、以及一些新兴硬件特性的建模(如 HBM3、GDDR7、CXL 3.0 内存语义、PCIe Gen6 PAM4 信令等)。每条仍然包含四个方程式子节。

weixin_49199313的博客 342

Delphi中var和out

var:   传递的是参数的地址 out:   以返回值的形式返回结果,类似函数的效果;可以实现一个函数返回多个值 转载于:https://www.cnblogs.com/Coder-MIFir/p/10898121.html...

weixin_34290000的博客 605

TMS VCL UI Pack源码版安装排错与高频实战技巧解析

Delphi桌面开发中,商业控件包是提升界面效率的关键,而VCL组件体系则承担着从窗体设计到业务逻辑落地的核心职责。理解控件包的工作原理,包括其设计期与运行期包机制、多版本IDE兼容性以及源码级调试能力,是稳定构建大型管理系统的前提。在工程实践中,开发者常需处理MD5哈希计算、JSON数据解析、数据导出至Excel及窗口置顶等基础需求,这些能力与控件库配合能显著缩短开发周期。同时,控件丢失、编译冲突等问题往往源于安装链路未理顺,掌握系统化的排错方法可保障项目可持续维护。本文以TMS VCL UI Pack

weixin_34367257的博客 367

delphi中var关键字

====================================================== 注:本文源代码点此下载 ====================================================== 首先简短说明在delphi中var的作用。 var关键字在delphi 中是再普通不过的一个关键字, 大家都知道它的作用就是说明其后定义的是变量

javazhuanzai的专栏 827

Cursor 团队代码规范与开发规则

本文提出了一套 Cursor 项目开发规范,涵盖代码结构、命名、日志、测试等关键环节,旨在提升代码质量和团队协作效率。核心规则包括:文件不超过2000行、函数不超过80行;变量命名禁用无意义单词;日志只记录关键信息;配置项禁止硬编码;依赖和敏感信息统一管理;核心逻辑测试覆盖率≥80%;Git提交遵循Conventional Commits规范。通过一个车辆数据处理函数的改造案例,展示了从"不规范"到"规范"的代码优化过程,体现了拆分函数、常量管理、错误处理等规范的实际

1255

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8257

delphi 函数参数传递 默认参数(传值)、var(传址)、out(输出)、const(常数)四类

参数可以分为: 默认参数(传值)、var(传址)、out(输出)、const(常数)四类 {默认参数是传值, 不会被改变}function MyF1(x: Integer): Integer;begin  Inc(x);  Result := x;end; {var参数是传址, 会被改变}function MyF2(var x: Integer): Integer;begin  Inc(x);

rznice的专栏 1万+

薄膜比拟、开口截面扭转承载力以及风电混塔水平缝张开状态下抗扭承载力推导

风电混塔水平缝张开状态下的抗扭承载力推导,从弹性力学说起

George的博客 873

Delphi 函数的 out 形参

【代码】Delphi 函数的 out 形参。

388

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1142

Google Earth Engine:计算逐年全球潜在蒸发量(PET)的 ERA 数据

通过获取温度、湿度和降水数据,并使用Penman-Monteith公式,我们可以得到每年的潜在蒸发量。在本文中,我们将使用Google Earth Engine平台和ERA(欧洲再分析气象数据集)数据来计算逐年全球的潜在蒸发量(PET)。接下来,我们需要对ERA数据进行预处理,以获取我们需要的潜在蒸发量数据。有了温度、湿度和降水数据,我们可以使用Penman-Monteith公式来计算每年的潜在蒸发量。最后,我们可以将计算得到的潜在蒸发量数据进行可视化,以便更好地理解全球的水汽蒸发情况。

VwajAlgorithm的博客 730

C# 中ref和out的区别

在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是: 1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都...

lemonemmm的博客 247

基于相场法模拟金属铜的晶粒的长大过程附matlab完整代码

晶粒生长是一种重要的材料形态演化过程,对于材料的性能和制备有着非常重要的影响。相场法是一种将材料结构和热力学性质联系起来的方法,它能够有效地模拟晶粒的长大过程并预测材料的结构和性能。本文所采用的相场模型是基于Cahn-Hilliard方程和Allen-Cahn方程的二次相场模型。其中,Cahn-Hilliard方程描述了晶界的自由能密度,而Allen-Cahn方程则描述了晶粒的彼此之间的界面能密度。本篇文章将介绍如何使用相场法模拟金属铜的晶粒的长大过程,并提供完整的MATLAB代码供读者参考。

m0_47037246的博客 1382

DELPHI 参数前缀的使用

传值参数传值参数可在过程内部修改,但过程返回时该修改不会反映出来。不加任何前缀,就表示该参数为传值参数。Procedure Foo( I : Integer );I 的值被传递到Foo 过程。当Foo 返回时,在Foo 中对I 的修改不会反映到I。传递引用参数用引用传递参数意味着传递了指向实际数据的一个指针。如果用 var前缀,即指定用引用传递参数。被调用过程会改变该参数,修改将对实际数据进行,过...

weixin_30808575的博客 156

VMware系列:此平台不支持虚拟化 Intel-VT-x/EPT 或 AMD-V/RVI

VMware系列:此平台不支持虚拟化 Intel-VT-x/EPT 或 AMD-V/RVI

weixin_54626591的博客 1万+

c++对halcon的动态链接库dll封装及调用(细细讲)

本文详细介绍了将Halcon图像处理算法封装为C++动态链接库(DLL)的完整流程,包括7个关键步骤:1)封装Halcon函数并导出CPP文件;2)在C++项目中配置Halcon环境(包含目录、库目录设置);3)验证Halcon代码;4)创建DLL项目并进行环境配置;5)编辑DLL并导出生成文件(.dll、.lib、.h);6)在主项目中配置DLL调用环境;7)编写测试代码验证功能。通过这个流程实现了Halcon算法的模块化封装和复用,文中提供了具体的配置路径和代码示例,重点说明了环境配置细节和文件结构安排

Tianwen_running的博客 966

Delphi 11中[]字符串索引的本质:UTF-16代码单元与内存直访

字符串索引是编程语言中最基础也最易被误解的操作之一,其底层原理直接关联内存布局、编码规范与运行时性能。在Object Pascal中,[]并非语法糖,而是编译器生成的直接内存偏移访问,单位为UTF-16代码单元而非Unicode字符——这决定了Length()与索引行为的语义鸿沟。理解该机制,是规避索引越界、代理对乱码、写时复制异常等典型问题的关键,也是实现零拷贝字符串处理、高性能日志解析及RAG文档切片等工程场景的技术前提。本文聚焦delphi11与Object Pascal双语境,深入拆解[]操作符在编

weixin_30460489的博客 411

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C#开发心得

IR(中间语言)等价于java的字节码。CLR(公共语言运行时)等价于JVM,用来执行IR。运行在.NET上的C#/F#/VB.NET/IronPython等语言都可以编译为IR,彼此互操作,就像JVM上kotlin/scala通过字节码与java语言互操作类似。

tlxamulet的博客 558

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

强制类型转换与as类型转换的区别

*强制类型转换与as类型转换的区别:当类型转换非法时,强制类型转换将抛出一个System.InvalidCastException异常, 而as不会抛出异常,它返回一个null值。 *类的静态成员属于类所有,不必生成实例就可以访问,它是在载入包含类的应用程序时创建的,但静态方法不能访问类的实例变量和方法。通常,静态变量是在定义时就赋初始值的。类的实例成员属于类的实例所有,不创建实例对象...

diaofuju9849的博客 158

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++类模板深度解析:从泛型编程到STL实现原理

泛型编程是C++实现代码复用的核心技术范式,其核心思想是通过参数化类型来编写与具体数据类型无关的通用代码。类模板作为泛型编程的主要实现机制,本质上是编译时的代码生成器,编译器根据提供的具体类型参数实例化出类型安全的特定类。这种编译期多态技术实现了零运行时开销的高性能抽象,是标准模板库(STL)中vector、map等容器的实现基础。在实际工程中,类模板广泛应用于数据结构(如栈、队列)、算法封装、资源管理(智能指针)等场景,通过模板特化、成员函数模板等高级特性,开发者可以构建灵活高效的通用组件。本文以Stac

weixin_34377919的博客 457

正则全局匹配的“接力”机制:从lastIndex到匹配引擎原理

文本处理与模式匹配是软件开发的基石,正则表达式作为高效的模式匹配工具,其匹配引擎的执行流程往往成为学习与调试的难点。其中,全局匹配模式下引擎如何维护位置指针、如何完成下一次匹配的“接力”,更是常见误区与性能问题的根源。理解 lastIndex 等状态机制,有助于掌握正则匹配原理,避免死循环、漏匹配等陷阱。从日志分析、批量替换到流式文本处理,全局匹配技术广泛应用于工程实践。本文以 JavaScript 为主,对比 Python、Java 等语言实现,深入拆解全局匹配的底层逻辑,帮助开发者建立跨语言的正则心智模

weixin_33805743的博客 625

C++模板进阶:从实例化到SFINAE与变参模板的深度解析

泛型编程是现代C++的核心范式之一,它通过模板机制实现代码的通用性和类型安全。其原理在于编译器在编译期根据具体类型参数生成特化代码,这一过程称为模板实例化,它能实现零开销的抽象。这种技术的核心价值在于提升代码复用率、优化性能(如编译期计算)和增强类型安全。在实际工程中,模板技术广泛应用于标准库容器(如vector)、算法(如sort)以及元编程框架。本文聚焦于C++模板的高级特性,深入探讨模板实例化、非类型模板参数、模板特化与偏特化等机制,并解析SFINAE规则和变参模板的实现原理,帮助开发者从模板使用者转

weixin_34007906的博客 449

Python for循环实战避坑指南:从语法糖到迭代协议

for循环是Python最基础的控制结构,但其底层依赖迭代协议(__iter__和__next__),而非表面语法。理解这一原理,才能解释为何文件对象、字典、range可直接遍历,而自定义类需显式实现;也才能规避边遍历边修改列表、for...else逻辑误用、嵌套循环变量污染等高频故障。在数据处理、日志解析、配置管理等工程场景中,正确运用enumerate、zip、生成器表达式及pandas/numpy替代方案,可显著提升代码稳定性、可读性与性能。本文聚焦真实生产环境中的循环陷阱与加固实践。

weixin_33749242的博客 476

深入解析ATL编程:Windows COM组件开发核心技术与实战指南

COM(组件对象模型)是Windows平台实现软件组件化与二进制兼容性的核心技术规范,它定义了跨语言、跨进程的对象通信标准。其原理基于接口与引用计数机制,通过GUID唯一标识组件,实现了代码的高度复用与系统集成。这一技术的核心价值在于支撑了Windows生态中海量系统服务、专业软件及运行时库的稳定运行。在实际开发中,处理高性能中间件、系统级插件或维护遗留系统时,COM技术尤为关键。ATL(Active Template Library)作为微软推出的C++模板库,正是为了高效实现COM规范而生,它通过模板元

weixin_30644369的博客 421

Java List转String全解析:从基础方法到性能优化实战

在Java编程中,字符串处理是基础且高频的操作,其中集合数据转换为字符串是常见的需求。其核心原理涉及字符串的不可变性、内存分配及拼接效率。掌握高效的转换技术对提升应用性能、确保数据格式正确传输具有重要价值,广泛应用于日志输出、SQL条件拼接、数据序列化等场景。本文聚焦List到String的转换,深入剖析StringBuilder、Stream API等方案,并针对空值处理、性能陷阱等热词问题提供实战解决方案,帮助开发者优化数据处理流程。

weixin_34007020的博客 546
上一篇: 获取字符串中某个指定的子串出现的开始位置(CHARINDEX用法)
下一篇: 在Delphi中通过OLE方式写Excel文件
aowo7144
博客等级 码龄10年 5粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值