Delphi基础回调函数消息与其使用.doc

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Delphi基础:回调函数及其使用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; 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;3 举例说明 ? 示例程序在H:\ 回调函数示例\ 目录下面。 ? 回调函数的使用主要在于windows原有的API函数,但对于用户的自定义的调用函数一般在于动态连接库中。常规的同一个工程下面一般不需要使用回调函数。(个人认为).。 Delphi中的消息处理 Delphi多线程及消息发送传递结构体参数 1、Unit2: unit Unit2; interface uses windows,classes,NMICMP,SysUtils,StdCtrls,messages; const WM_MY_PING = WM_USER +1024; type TPingMsg = record msg : array[0..1

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档