callback求救(50分)

  • 主题发起人 主题发起人 fifa2000
  • 开始时间 开始时间
F

fifa2000

Unregistered / Unconfirmed
GUEST, unregistred user!
能解释一下具体函数的作用吗?
多谢

type
TCallBackFunction = function(s: string): integer;
CallMe(s: string): integer;



procedure TestCallBack(CallBackFunction: TCallBackFunction); far; external 'Other';
{ Note that 'other' is a Dll containing the procedure TestCallBack }

function CallMe(s: PChar): integer;
begin
{ what ever you need to do }
CallMe := 1; { What ever you need to return }
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TestCallBack(CallMe);
end;

type
TMainFunction = function(s: string): integer;
TestCallBack(MainFunc: TMainFunction);
{ in library Other implementation }
TestCallBack(MainFunc: TMainFunction);
var
result: integer;
begin
result:=MainFunc('test');
end;
 
不就是回调函数吗?就是一个函数获得另一个函数的地址,然后调用这个函数,也就是说,
函数不是由本程序调用的,而是由另一个封装在WIN API函数中的函数调用的。
 
to only you:具体讲讲回调函数的机理,用法,行吗?
多谢
 
回调函数与类的虚拟方法差不多。
一般地,调用回调函数的是管理函数,被调用的回调函数进行具体的事务处理。
比如说,我编写一个遍历磁盘文件的函数,可以把指定路径下的所有文件都枚举出来,并
对每一个文件进行处理,但对文件的具体处理可能是多种多样的,得由这个文件遍历函数
的调用者来确定,所以,我就设置了一个函数参数,由调用者在调用时提供,每当我找到
一个文件就调用这个参数所指定的函数。于是,当你需要对每个文件进行处理时,就编写
一个对文件进行具体处理的函数(回调函数),将其作为参数调用文件遍历函数,而者结
合,就完成了遍历并处理文件的功能。
这样做的好处是,管理函数是通用的,你也不用关心管理上的实现细节。
 
多人接受答案了。
 
后退
顶部