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