麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

DELPHI中回調函數的使用

2019-11-18 18:25:21
字體:
來源:轉載
供稿:網友
     回調函數及其使用
                           

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;
 

3 舉例說明

示例程序在H:/ 回調函數示例/  目錄下面。
回調函數的使用主要在于windows原有的API函數,但對于用戶的自定義的調用函數一般在于動態連接庫中。常規的同一個工程下面一般不需要使用回調函數。(個人認為).。

上一篇:DELPHI中DBGrid中行的定位及著色實現

下一篇:Delphi7的IDE概述(一)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 国产精品区一区二区三区 | 国产一级在线免费观看 | 久久久三级免费电影 | 久久久成人精品视频 | 4480午夜| 欧美a在线观看 | a免费视频 | 暴力肉体进入hdxxxx0 | 九色com | 中文字幕精品一二三四五六七八 | 韩国精品视频在线观看 | 精品国产一区二区三区四 | 欧美色另类| 免费黄网站在线播放 | 精品久久久久久久 | 欧美黄色大片免费观看 | 国产精品久久久久久久久久了 | 欧美黄在线 | 亚洲免费永久 | 国产系列 视频二区 | 国产成人高潮免费观看精品 | 久久亚洲精品视频 | 黄色电影免费提供 | 国产精品av久久久久久网址 | 黄色男女视频 | 久草在线视频福利 | 国产午夜精品久久久久久免费视 | 欧美成人精品一区 | 亚洲精品一区中文字幕 | 欧美精品成人一区二区三区四区 | 久国久产久精永久网页 | 久久国产一级 | 成人国产精品一区 | 超碰人人做人人爱 | 免费a级毛片永久免费 | 久久99精品视频在线观看 | 91 免费看片 | 国产精品亚洲yourport | 国产一区二区观看 | 福利免费观看 | 成人在线观看地址 |