在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 提供了几种同步机制,如 TEvent, TMutex, TCriticalSection 等。在这里,我们使用 TEvent 来同步主线程和工作线程。工作线程完成任务后,通过 SetEvent 触发事件,主线程则通过 WaitFor 监听该事件,确保在...
4. **调用约定**:在Delphi中,不同的调用约定(如stdcall、cdecl等)会影响函数参数的传递方式和谁负责清理堆栈。在实现回调函数时,必须确保调用约定与调用者匹配,否则可能导致错误。 5. **类型安全**:由于DLL...
指的是传递的参数类型及函数返回类型不能是Delphi特有的, 比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不 能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。...
Delphi支持两种参数传递方式: 1. **按值(ByValue)**:参数的副本被传递到函数,函数内部对参数的修改不会影响外部的变量。 2. **按引用(ByReference)**:使用`var`关键字,原始变量的地址被传递,函数内部的...
Delphi是一种基于Object Pascal语言的集成开发环境(IDE),它以其高效的代码生成、直观的可视化设计和强大的组件库而闻名。...在学习过程中,参考《Delphi 6 函数介绍》这样的资料,可以更好地掌握Delphi函数的精髓。
回调函数是一种将函数指针作为参数传递给其他函数的方法,这样被调用的函数可以在适当的时候调用这个传递进来的函数。在Delphi中,我们可以使用`procedure`或`function`类型的变量来存储函数指针。 创建DLL项目时,...
详细说明Delphi函数与过程时,文档可能包含了以下几个方面的知识点: 1. 基本定义:介绍什么是过程,什么是函数,它们在程序中的作用和目的。 2. 语法结构:说明Delphi中如何定义和声明过程与函数,包括关键字、...
回调函数在编程中是一种常见的设计模式,它允许我们将一个函数作为参数传递给另一个函数,然后在特定的时间或条件下被调用。在这个“自写的回调函数demo”中,我们重点探讨Delphi 7环境下如何实现回调机制,以及它在...
3. **在主程序中使用BPL**:在主程序中,你需要引入BPL并实例化它,然后将你的自定义回调函数传递给BPL中的`ExecuteWithCallback`函数。假设你有一个名为`MyProcedure`的回调函数,如下所示: ```delphi procedure ...
在Delphi中,调用API函数通常涉及以下几个步骤: 1. **声明函数原型**:在Delphi中,我们需要先声明API函数的原型,这通常在`.pas`文件的`uses`段落之后进行。声明时需要指定函数的返回类型、名称、参数类型等。...
在Delphi中,一个函数通常由以下几部分组成: 1. **函数关键字**:`function` 或 `procedure`,根据函数是否返回值来选择。 2. **函数名**:一个独特的标识符,用于调用函数。 3. **参数列表**:括号内的参数声明,...
4. 注册Delphi函数供Lua调用。 5. 类型转换和数据交互。 通过这样的组合,开发者可以在Delphi应用程序中灵活地利用Lua脚本来实现特定逻辑,从而提高代码的可维护性和扩展性。在实际项目中,`delphiCallLua`文件可能...
下面将详细介绍几种常见的窗体间参数传递方法。 1. **使用构造函数传递参数** 当你需要在打开新窗体时立即传递数据,可以使用构造函数来实现。例如,假设你有一个主窗体`Form1`和一个子窗体`Form2`,在`Form1`中...
在本示例中,"delphi dll窗体,多文档界面,dll对象传参数,接口" 涉及了几个关键的Delphi编程概念。 首先,"DLL (动态链接库)"是Windows操作系统中的一种共享代码机制,允许多个程序同时使用同一段代码,减少了...
在IT领域,Delphi是一种流行的面向对象的编程环境,它基于Pascal语言。在这个场景中,我们关注的是如何使用Delphi7来实现一个利用管道(Pipe)...这不仅扩展了Delphi应用程序的功能,还为用户提供了一种新的操作方式。
4. **调用Python函数**:通过TPythonModule,你可以加载Python模块,并调用其中的函数,将Delphi的数据传递给Python,反之亦然。 5. **异常处理**:由于是两种语言的交互,错误处理至关重要。Python4Delphi提供了...
在IT行业中,Delphi是一种基于Pascal语言的集成开发环境(IDE),由Embarcadero Technologies公司维护。它以其高效、快速的编译能力和对Windows平台的深度支持而闻名。"CALL"在编程中通常指的是调用函数或过程,它是...
1. **单元(Units)**: Delphi 的源代码组织单位,可以包含类、函数和过程。在 BASM 中调用 Delphi 函数,需要在相应的单元中声明。 2. **Pascal 属性和汇编属性**: Delphi 允许在函数声明中添加属性,来指示编译器...
在Delphi中,创建全局键盘钩子需要使用`SetWindowsHookEx`函数,它接受一个钩子类型(WH_KEYBOARD for 键盘钩子),一个钩子处理函数(通常为DLL中的函数),一个线程ID以及一个模块句柄作为参数。钩子处理函数将在...
4. **调用DLL函数**:使用声明的函数原型,编写Delphi代码来调用DLL中的屏幕取词功能,传递必要的参数,如选中的文本坐标等。 5. **处理结果**:接收DLL返回的结果,通常包括翻译信息,然后在Delphi应用程序中显示给...