delphi基础回调函数消息及其使用

delphi基础回调函数消息及其使用

ID:34722656

大小:235.68 KB

页数:34页

时间:2019-03-10

delphi基础回调函数消息及其使用_第1页
delphi基础回调函数消息及其使用_第2页
delphi基础回调函数消息及其使用_第3页
delphi基础回调函数消息及其使用_第4页
delphi基础回调函数消息及其使用_第5页
资源描述:

《delphi基础回调函数消息及其使用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Delphi基础:回调函数及其使用1回调函数的概述 回调函数是这样一种机制:调用者在初始化一个对象(这里的对象是泛指,包括OOP中的对象、全局函数等)时,将一些参数传递给对象,同时将一个调用者可以访问的函数地址传递给该对象。这个函数就是调用者和被调用者之间的一种通知约定,当约定的事件发生时,被调用者(一般会包含一个工作线程)就会按照回调函数地址调用该函数。 这种方式,调用者在一个线程,被调用者在另一个线程。 消息:消息也可以看作是某种形式的回调,因为消息也是在初始化时由调用者向被调用者传递一个句柄和一个消息编号,在约定的事件发生时被调用者向调用者发

2、送消息。这种方式,调用者在主线程中,被调用者在主线程或者工作线程中。 Delphi事件模型:在Delphi的VCL中有很多可视化组件都是使用事件模型,例如TForm的OnCreate事件,其原理是:在设计时指定事件函数,在运行时事件触发,则会调用在设计时指定的事件函数。在机制上,Delphi事件模型与回调是一样的。但具体形式有些区别,纯的回调函数是全局函数的形式,而Delphi事件是对象方法的形式,即可以定义如下回调函数类型 type     TCallBackFunc=procedure(pData:Pointer)ofobject;2回调函数的

3、使用说明 回调函数主要在两个场合使用,第一个是某些windows的API要求用回调函数作为其参数地址,另一种是用户在某种特定的场合定义的某个函数需要使用回调函数作为其参数地址,对于用户的定义的函数来说,一般是当调用动态连接库中的函数时使用。 对于使用一个回调函数主要有以下几个步骤: 1、定义一个回调函数类型,跟一般的函数过程的定义并没有什么区别,但其定义必须根据需要满足回调函数的函数要求,唯一的区别在于在函数或过程的定义后面必须声明其为windows标准调用;  例:type   THDFunction=function(I:integer;s:s

4、tring):integer;stdcall;2、然后根据此原形定义一个相应的函数或过程,对于这个函数或过程来说名字没有什么要求,对函数其参数的类型和返回值的类型必须和定义的回调函数类型完全一致,对于过程来说,只需要其参数类型一样就可以了。 例:根据上面的函数和过程的原形定义一个相应的函数和一个相应的过程。 函数原形定义:FunctionHdFunExample(k:integer,sExam:string):integer;stdcall;过程定义:procedureHdProExample(sExam:string);stdcall; 3、在程

5、序中实现此回调函数或着过程;FunctionHdFunExample(k:integer,sExam:string):integer;stdcall;   Begin   End;   procedureHdProExample(sExam:string);stdcall;     begin   end; 4、调用过程; 回调函数一般作为系统的某个函数的入口地址; 根据调用函数的原形:进入讨论组讨论。 假设有如下调用函数:functionDyHdFunExample(HdFun:THDFunction;I:integer):boolean;注: 

6、在调用函数中通过对函数指针的处理可以直接调用回调函数(即调用函数中的那个是回调函数类型的参数,直接操作它),使回调函数履行一定的操作。即在调用函数中实现回调函数的功能。 调用:var   I:integer;   begin   I:=DyHdFunExample(@HdFunExample,i);   //…….   End;3举例说明 示例程序在H:回调函数示例目录下面。 回调函数的使用主要在于windows原有的API函数,但对于用户的自定义的调用函数一般在于动态连接库中。常规的同一个工程下面一般不需要使用回调函数。(个人认为).。Del

7、phi中的消息处理Delphi多线程及消息发送传递结构体参数1、Unit2:unitUnit2;interfaceuseswindows,classes,NMICMP,SysUtils,StdCtrls,messages;constWM_MY_PING=WM_USER+1024;type//要传递的消息记录.TPingMsg=recordmsg:array[0..1023]ofchar;id:integer;Handled:boolean;msg2:string;//建议如果需要动态管理,比如采用List,采用字符数组的方式会比较好,//因为在动态

8、使用结构时,如过没有处理好,采用string就可能会造成内存泄露.//当然在这里例子中没关系.end;pPingMsg=^

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。