Turbo pascal、Free pascal和delphi7都没有实现,以用就说function非法。
解决方案 »
- 我现在想实现如下目的,请帮忙出出主意如何实现好。多客户端相互交换数据
- 在Delphi 7中如何使用TidHttp来达到Cached的目的
- 运行时出现Access Violation address 0028332E in moudle 'Project2.dll',Read address 00000324错误,请问这是为什么?用什么方法把Form
- 一个WORD型变量赋一个负数,为何不报错?
- 请问,游戏中的鼠标和桌面上的鼠标有什么区别。
- 一个关于ADOStoredProc控件的参数传递问题
- 如何用API来实现windows 2000 下如何自定义纸张大小?
- 未升级,散分!
- 通过什么函数返回
- WebBrowser1粘贴问题
- 求翻译C++代码为Delphi(保存文件100分)
- Delphi的做条形码的兄弟们来点个卯吧!
这么使用
function xxx(param1:Type1;param2:type2...):xxx; pascal;
这样约束即可.Delphi默认函数是register
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
private
{ Private declarations }
function xyz(x:integer):boolean;//定义一个类的"私有"函数、整型参数、返回布尔型值
public
{ Public declarations }
function abc(x:integer):boolean;//定义一个类的"公开"函数、整型参数、返回布尔型值
end;var
Form1: TForm1;
function cdef(y:string):integer;//定义一个单元的"公开"函数、字符串参数、返回整型值implementation//函数 abc、cdef 可被外部单元引用,函数 xyz、hijk不能被外部单元引用。
//单元或类的过程,除无返回外,定义和编写过程体,与本例函数方法相同。
//单元或类的变量定义,摆放位置与本例函数定义的摆放位置同义。{$R *.dfm}function hijk(z:boolean):string;//省略定义的函数体(此为单元内私有函数),必须放在引用该函数的语句之前
begin
Result := 'False';
if z then Result := 'True';
end;function TForm1.xyz(x: integer): boolean;//类的函数体,需在函数名前有类名作前导
begin
Result := false;
//......
end;function TForm1.abc(x: integer): boolean;//类的函数体,需在函数名前有类名作前导
begin
Result := false;
//......
end;function cdef(y:string):integer;//单元的函数,函数名前不需类名作前导
begin
Result := 0;
showmessage(hijk(true));//此处引用了一个省略定义的函数(该类函数或过程,须摆放在此之前!)
//......
end;end.
var s:string;
procedure aaaa(var tmp:string);//过程或函数内的过程,无须定义
begin
tmp:='您好!';
end;
function bbbb(tmp:string):boolean;//过程或函数内的函数,无须定义
begin
Result := tmp<>'';
end;
begin
showmessage(s);
if bbbb(s) then showmessage('"s"变量值不空')
else showmessage('"s"变量值空');
aaaa(s);
showmessage(s);
if bbbb(s) then showmessage('"s"变量值不空')
else showmessage('"s"变量值空');
end;
对于楼主的需求,只要先定义函数指针参数(Delphi中称之为Procedural Types),然后将参数声明为此类型即可。
SysUtils;
function f1(t:real):real;
begin
f1:=t;
end;function f2(t:real):real;
begin
f2:=t*2.0;
end;function f3(t:real):real;
begin
f3:=t*3.0;
end;function multiFun(function f(t:real):real;r:real):real;{这个就是典型的带函数参数的函数}
begin
mutilFun:=f(r);
end;begin
writeln('multiFun(f1,2)=',multiFun(f1,2.0));
writeln('multiFun(f2,2)=',multiFun(f2,2.0));
writeln('multiFun(f3,2)=',multiFun(f3,2.0));
readln;
end.
我说的函数参数和过程参数指的不是某个函数或过程的参数,而是用函数名或过程名作为某个函数或过程的参数,类似于C语言的函数指针。我用的教材很老93年的,不知道那种编译器实现了这种功能。
function mutiFun(function f(n:real):real;r:real):real;
上面这个就是带函数参数的函数。function f(n:real):real;就是一类函数,只要类型相同就可以作为实参。
TFX = function(t:real):real;然后:
function multiFun(fx: TFX; r:real):real;
就可以了。
函数指针类型,要不要预先定义,差不多
void myCallback(void (*pro)(int ),int a)
{
xxx
}
delphi/pascal中应该这样用:Type
Tpro=procedure(i:Integer);procedure myCallback(pro:Tpro;a:Integer);
begin
xxxx
end;