C#委托所蘊含的函數(shù)指針概念詳細解析
原則:
1、函數(shù)指針,實際上是函數(shù)編碼后的指令在內(nèi)存中的首地址,在C++/C中,這個地址可以用函數(shù)名直接使用
一個函數(shù)調(diào)用另一個函數(shù)的時候,就可以把被調(diào)用函數(shù)以函數(shù)指針的形式作為參數(shù)傳入
2、回調(diào)函數(shù)callback使用的技術就是函數(shù)指針:
回調(diào)函數(shù)就好像是一個中斷處理函數(shù),系統(tǒng)在符合你設定的條件時自動調(diào)用。為此,你需要做三件事:
1). 聲明;
2). 定義;
3). 設置觸發(fā)條件,就是在你的函數(shù)中把你的回調(diào)函數(shù)名稱轉(zhuǎn)化為地址作為一個參數(shù),以便于DLL調(diào)用。
回調(diào)函數(shù)是應用程序提供給Windows系統(tǒng)DLL或其它DLL調(diào)用的函數(shù),一般用于截獲消息、獲取系統(tǒng)信息或處理異步事件。應用程序把回調(diào)函數(shù)的地址指針告訴DLL,而DLL在適當?shù)臅r候會調(diào)用該函數(shù)。回調(diào)函數(shù)必須遵守事先規(guī)定好的參數(shù)格式和傳遞方式,否則DLL一調(diào)用它就會引起程序或系統(tǒng)的崩潰。通常情況下,回調(diào)函數(shù)采用標準WindowsAPI的調(diào)用方式,即__stdcall,當然,DLL編制者可以自己定義調(diào)用方式,但客戶程序也必須遵守相同的規(guī)定。在__stdcall方式下,函數(shù)的參數(shù)按從右到左的順序壓入堆棧,除了明確指明是指針或引用外,參數(shù)都按值傳遞,函數(shù)返回之前自己負責把參數(shù)從堆棧中彈出。
3、C#中用委托這種概念實現(xiàn)了函數(shù)指針技術而已,另外.ent提供額外的安全性,當然也損失了靈活性
相關文章
Qt GUI圖形圖像開發(fā)之QT表格控件QTableView,QTableWidget復雜表頭(多行表頭) 及凍結(jié)、固定特
這篇文章主要介紹了Qt GUI圖形圖像開發(fā)之QT表格控件QTableView,QTableWidget復雜表頭(多行表頭) 及凍結(jié)、固定特定的行的詳細方法與實例,需要的朋友可以參考下2020-03-03C++中set/multiset容器詳解(附測試用例與結(jié)果圖)
set/multiset屬于關聯(lián)式容器,底層結(jié)構(gòu)是用二叉樹實現(xiàn),下面這篇文章主要給大家介紹了關于C++中set/multiset容器的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-02-02用C語言求冪函數(shù)和指數(shù)函數(shù)的方法
這篇文章主要介紹了用C語言求冪函數(shù)和指數(shù)函數(shù)的方法,即pow()函數(shù)和sqrt()函數(shù)的使用,需要的朋友可以參考下2015-08-08