`
murongzilin
  • 浏览: 5728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Delphi过程函数传递参数的几种方式

阅读更多

在Delphi过程、函数中传递参数几个修饰符为Const、Var、Out。另一种不加修饰符的为默认按值传递参数。 

一、默认方式以值方式传递参数 

procedure TForm1.ProcNormal(Value: string); 
begin 
OrigNum:=Value+' Me'; 
lblReturn.Caption:=OrigNum;//OrigNum为'Hello Me' 
lblOrig.Caption:=Value;//Value为'Hello' 
end; 

调用: 

OrigNum:='Hello'; 
ProcNormal(OrigNum); 

二、以Const方式传递参数,这个参数在调用过程中不能改变,并且这种方式会被编译器优化,一般建议尽可能地使用这种方式。 

procedure TForm1.ProcConst(const Value: string); 
begin 
OrigNum:=Value+' Me'; 
lblReturn.Caption:=OrigNum;//为'Hello Me‘ 
lblOrig.Caption:=Value;//为'Hello Me' 
end; 

三、按引用方式传递参数 

procedure TForm1.ProcRef(var value: string); 
begin 
OrigNum:=Value+' Me'; 
lblReturn.Caption:=OrigNum;//为'Hello Me‘ 
lblOrig.Caption:=Value;//为'Hello Me' 
end; 

四、按Out方式传递参数,这个方式传递参数时,参数可以不被初始化,即使有值也被忽视,它一般用于输出,它可以实现在一个过程中返回多个值,我们通常在分布式对象模型,如COM中使用它。 

procedure TForm1.ProcOut(out Value: string); 
begin 
OrigNum:=Value+' Me'; 
lblReturn.Caption:=OrigNum;//为'Me' 
lblOrig.Caption:=Value;//为'Me' 
end; 

五、无类型参数,这是一种较为特殊的方法,参数的类型不确定,只能用Const、Var、Out修饰,不能用于值方式传递参数,具体使用示例如下: 

procedure TForm1.ProcUntype(const Value); 
begin 
OrigNum:=string(Value)+' Me'; 
lblReturn.Caption:=OrigNum;//为'Hello Me' 
lblOrig.Caption:=string(Value);//为'Hello Me' 
end;

六、默认参数,即如果此参数在调用时未提供时,将使用默认值。 

procedure TForm1.ProcDefault(const Value, const DefaultValue:string=' 123'); 
begin 
OrigNum:=Value+' Me'+DefaultValue; 
lblReturn.Caption:=OrigNum;//为'Hello Me 123' 
lblOrig.Caption:=Value;// 为'Hello Me 123' 
end; 

七、开放数组参数,即参数数组的元素个数不确定。 

procedure TForm1.ProcArray(const Value: array of string); 
var 
i:Integer; 
begin 
for i:=Low(Value) to High(Value) do 
OrigNum:=OrigNum+Value[i];//调用后为'Hello abc dbd' 
lblReturn.Caption:=OrigNum; 
end; 

调用: 

OrigNum:='Hello'; 
ProcArray([' abc ',' dbd']); 

八、无类型开放数组参数,即类型及元素个数皆不确定。在WIN32平台中,这个参数的类型实际为array of TVarRec,其使用示例如下: 

procedure TForm1.ProcArrayConst(const Value: array of const); 
var 
i:Integer; 
begin 
for i:=Low(Value) to High(Value) do 
with Value[i] do 
case VType of 
vtAnsiString: OrigNum:= OrigNum+String(VAnsiString); 
vtInteger: OrigNum:=OrigNum+IntToStr(VInteger); 
vtBoolean: OrigNum := OrigNum + BoolToStr(VBoolean); 
vtChar: OrigNum := OrigNum + VChar; 
vtExtended: OrigNum := OrigNum + FloatToStr(VExtended^); 
vtString: OrigNum := OrigNum + VString^; 
vtPChar: OrigNum := OrigNum + VPChar; 
vtObject: OrigNum := OrigNum + VObject.ClassName; 
vtClass: OrigNum := OrigNum + VClass.ClassName; 
vtCurrency: OrigNum := OrigNum + CurrToStr(VCurrency^); 
vtVariant: OrigNum := OrigNum + string(VVariant^); 
vtInt64: OrigNum := OrigNum + IntToStr(VInt64^); 
end; 
lblReturn.Caption:=OrigNum;//调用后为'Hello abc 3' 
end; 

调用: 

OrigNum:='Hello'; 
ProcArrayConst([' abc ',3]); 

分享到:
评论

相关推荐

    delphi多线程传递参数及同步二

    Delphi 提供了几种同步机制,如 TEvent, TMutex, TCriticalSection 等。在这里,我们使用 TEvent 来同步主线程和工作线程。工作线程完成任务后,通过 SetEvent 触发事件,主线程则通过 WaitFor 监听该事件,确保在...

    delphi封装的回调函数DLL

    4. **调用约定**:在Delphi中,不同的调用约定(如stdcall、cdecl等)会影响函数参数的传递方式和谁负责清理堆栈。在实现回调函数时,必须确保调用约定与调用者匹配,否则可能导致错误。 5. **类型安全**:由于DLL...

    Delphi中制作DLL中回调函数的应用

    指的是传递的参数类型及函数返回类型不能是Delphi特有的, 比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不 能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。...

    Delphi 函数

    Delphi支持两种参数传递方式: 1. **按值(ByValue)**:参数的副本被传递到函数,函数内部对参数的修改不会影响外部的变量。 2. **按引用(ByReference)**:使用`var`关键字,原始变量的地址被传递,函数内部的...

    Delphi 函数简介

    Delphi是一种基于Object Pascal语言的集成开发环境(IDE),它以其高效的代码生成、直观的可视化设计和强大的组件库而闻名。...在学习过程中,参考《Delphi 6 函数介绍》这样的资料,可以更好地掌握Delphi函数的精髓。

    关于delphi 7的DLL使用回调函数

    回调函数是一种将函数指针作为参数传递给其他函数的方法,这样被调用的函数可以在适当的时候调用这个传递进来的函数。在Delphi中,我们可以使用`procedure`或`function`类型的变量来存储函数指针。 创建DLL项目时,...

    Delphi procedure and function

    详细说明Delphi函数与过程时,文档可能包含了以下几个方面的知识点: 1. 基本定义:介绍什么是过程,什么是函数,它们在程序中的作用和目的。 2. 语法结构:说明Delphi中如何定义和声明过程与函数,包括关键字、...

    自写的回调函数demo

    回调函数在编程中是一种常见的设计模式,它允许我们将一个函数作为参数传递给另一个函数,然后在特定的时间或条件下被调用。在这个“自写的回调函数demo”中,我们重点探讨Delphi 7环境下如何实现回调机制,以及它在...

    Delphi回调函数实例

    3. **在主程序中使用BPL**:在主程序中,你需要引入BPL并实例化它,然后将你的自定义回调函数传递给BPL中的`ExecuteWithCallback`函数。假设你有一个名为`MyProcedure`的回调函数,如下所示: ```delphi procedure ...

    Delphi API 函数

    在Delphi中,调用API函数通常涉及以下几个步骤: 1. **声明函数原型**:在Delphi中,我们需要先声明API函数的原型,这通常在`.pas`文件的`uses`段落之后进行。声明时需要指定函数的返回类型、名称、参数类型等。...

    Delphi带参数涵数调用

    在Delphi中,一个函数通常由以下几部分组成: 1. **函数关键字**:`function` 或 `procedure`,根据函数是否返回值来选择。 2. **函数名**:一个独特的标识符,用于调用函数。 3. **参数列表**:括号内的参数声明,...

    delphi调用lua脚本的一个例子

    4. 注册Delphi函数供Lua调用。 5. 类型转换和数据交互。 通过这样的组合,开发者可以在Delphi应用程序中灵活地利用Lua脚本来实现特定逻辑,从而提高代码的可维护性和扩展性。在实际项目中,`delphiCallLua`文件可能...

    第一节 Form窗体间的参数传递[基础学习]

    下面将详细介绍几种常见的窗体间参数传递方法。 1. **使用构造函数传递参数** 当你需要在打开新窗体时立即传递数据,可以使用构造函数来实现。例如,假设你有一个主窗体`Form1`和一个子窗体`Form2`,在`Form1`中...

    delphi dll窗体,多文档界面,dll对象传参数,接口 的demo

    在本示例中,"delphi dll窗体,多文档界面,dll对象传参数,接口" 涉及了几个关键的Delphi编程概念。 首先,"DLL (动态链接库)"是Windows操作系统中的一种共享代码机制,允许多个程序同时使用同一段代码,减少了...

    Delphi7实现管道方式操作控制台

    在IT领域,Delphi是一种流行的面向对象的编程环境,它基于Pascal语言。在这个场景中,我们关注的是如何使用Delphi7来实现一个利用管道(Pipe)...这不仅扩展了Delphi应用程序的功能,还为用户提供了一种新的操作方式。

    python4delphi组件安装包

    4. **调用Python函数**:通过TPythonModule,你可以加载Python模块,并调用其中的函数,将Delphi的数据传递给Python,反之亦然。 5. **异常处理**:由于是两种语言的交互,错误处理至关重要。Python4Delphi提供了...

    找CALL测试delphi

    在IT行业中,Delphi是一种基于Pascal语言的集成开发环境(IDE),由Embarcadero Technologies公司维护。它以其高效、快速的编译能力和对Windows平台的深度支持而闻名。"CALL"在编程中通常指的是调用函数或过程,它是...

    Delphi源码演示如何在BASM中调用Delphi Functions..rar

    1. **单元(Units)**: Delphi 的源代码组织单位,可以包含类、函数和过程。在 BASM 中调用 Delphi 函数,需要在相应的单元中声明。 2. **Pascal 属性和汇编属性**: Delphi 允许在函数声明中添加属性,来指示编译器...

    delphi取键值

    在Delphi中,创建全局键盘钩子需要使用`SetWindowsHookEx`函数,它接受一个钩子类型(WH_KEYBOARD for 键盘钩子),一个钩子处理函数(通常为DLL中的函数),一个线程ID以及一个模块句柄作为参数。钩子处理函数将在...

    Delphi 10.2版本编译dll和调用dll.rar

    记得根据函数的调用约定正确地传递参数。 4. **释放资源**:当你完成DLL的使用,记得使用`FreeLibrary`函数释放模块句柄,以避免资源泄露。 在Delphi 10.2中,你还可以使用更高级的特性,如RTTI(运行时类型信息)...

Global site tag (gtag.js) - Google Analytics