1 回调函数的概述
回调函数是这样一种机制:调用者在初始化一个对象(这里的对象是泛指,包括OOP中的对象、全局函数等)时,将一些参数传递给对象,同时将一个 调用者可以访问的函数地址传递给该对象。这个函数就是调用者和被调用者之间的一种通知约定,当约定的事件发生时,被调用者(一般会包含一个工作线程)就会 按照回调函数地址调用该函数。
这种方式,调用者在一个线程,被调用者在另一个线程。
消息:
消息也可以看作是某种形式的回调,因为消息也是在初始化时由调用者向被调用者传递一个句柄和一个消息编号,在约定的事件发生时被调用者向调用者发送消息。
这种方式,调用者在主线程中,被调用者在主线程或者工作线程中。
Delphi事件模型:
在Delphi的VCL中有很多可视化组件都是使用事件模型,例如TForm的OnCreate事件,其原理是:在设计时指定事件函数,在运行时事件触发,则会调用在设计时指定的事件函数。
在机制上,Delphi事件模型与回调是一样的。但具体形式有些区别,纯的回调函数是全局函数的形式,而Delphi事件是对象方法的形式,即可以定义如下回调函数类型
type
TCallBackFunc = procedure (pData: Pointer) of object;
2 回调函数的使用说明
回调函数主要在两个场合使用,第一个是某些windows的API要求用回调函数作为其参数地址,另一种是用户在某种特定的场合定义的某个函数需要使用回调函数作为其参数地址,对于用户的定义的函数来说,一般是当调用动态连接库中的函数时使用。
对于使用一个回调函数主要有以下几个步骤:
1、定义一个回调函数类型,跟一般的函数过程的定义并没有什么区别,但其定义必须根据需要满足回调函数的函数要求,唯一的区别在于在函数或过程的定义后面必须 声明其为windows标准调用;
例:
type
THDFunction= function(I:integer;s:string):integer; stdcall;
对于过程的声明:
type
THDProcedure=procedure(s:string); stdcall;
2、然后根据此原形定义一个相应的函数或过程,对于这个函数或过程来说名字没有什么要求,对函数其参数的类型和返回值的类型必须和定义的回调函数类型完全一致,对于过程来说,只需要其参数类型一样就可以了。
例:根据上面的函数和过程的原形定义一个相应的函数和一个相应的过程。
函数原形定义:
Function HdFunExample(k:integer,sExam:string):integer; stdcall;
过程定义:
procedure HdProExample(sExam:string);stdcall;
3、在程序中实现此回调函数或着过程;
Function HdFunExample(k:integer,sExam:string):integer; stdcall;
Begin
End;
procedure HdProExample(sExam:string);stdcall;
begin
end;
4、调用过程;
回调函数一般作为系统的某个函数的入口地址;
根据调用函数的原形:
假设有如下调用函数:
function DyHdFunExample(HdFun:THDFunction;I:integer):boolean;
注:
在调用函数中通过对函数指针的处理可以直接调用回调函数(即调用函数中的那个是回调函数类型的参数,直接操作它),使回调函数履行一定的操作。即在调用函数中实现回调函数的功能。
调用:
var
I:integer;
begin
I:=DyHdFunExample(@HdFunExample,i);
//…….
End;
分享到:
相关推荐
delphi 回调函数示例,有分直接下。
在Delphi中动态链接库DLL文件中回调函数的使用
Delphi回调函数的使用
DLL窗口中回调函数的演示(Delphi)。知识点:1、DLL中窗口的引用 2、DLL中的回调函数的应用。
delphi的回调函数实例,写得很简单,不过原理都一样
delphi回调函数例子,简单明了,希望对大家有帮助
用delphi封装的调用回调函数的DLL
扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面 向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在 要进行事件触发的地方检查事件...
delphi封装的回调函数DLL,为了自动触发事件
主程序用回调函数作为参数,调用DLL窗口,在DLL窗口中使用回调函数,反写主程序信息,实例中用DLL的编辑框反写主程序编辑框的内容
Delphi回调函数实例是通过BPL函数调用另外一个bpl里的函数实例
1.delphi回调函数 2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用!
利用Delphi7实现的调用回调函数。与一般回调函数不同,此回调函数调用时利用线程,实现调用回调函数后,不等处理完,立即返回。
只是回调函数一个基本的demo,诠释了回调的定义和外部调用,数据传输的过程
1:delphi 动态库编写并实现回调函数 2:delphi调用动态库回调函数的例子。
怎么往SetTimer的回调函数传递参数
Delphi实现参数传递函数的例子,有时候把一个函数继续往下传递,可以通过函数实体当成另外一个函数的参数,就像API中传递回调函数的功能一样,这样会省去很多麻烦,程序演示界面如上图所示。
{* 查找指定目录下文件的回调函数} procedure FindFile(const Path: string; const FileName: string = '*.*'; Proc: TFindCallBack = nil; bSub: Boolean = True; const bMsg: Boolean = True); {* 查找指定目录...
本过程中,将向回调函数 AFtpDownEvent 触发 HEM_ADDURL 事件通知 2、工作线程调用任务对象TFTPHeadObj.DoThreadExecute 过程获取远程文件大小 备注:该功能实际使用到FTP命令SIZE,该命令一些老版本FTP服务器有可能...
这个针对学习DELPHI函数的用法还是可以,我在10.1下编译通过,这个是我学习的时候学了一天的。里面含有多种方法。希望对大家有帮助。