C++中IDispatch接口
生活随笔
收集整理的這篇文章主要介紹了
C++中IDispatch接口
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
IDispatch的存在是因為有些語言不支持虛函數(shù)表vtable,比如vb,asp等 它的主要作用是“接收一個函數(shù)的名稱并執(zhí)行它”
然后IDispatch有幾個函數(shù):
GetIDsOfNames,取一個函數(shù)的名稱并返回其調(diào)度ID,或稱DISPID
Invoke,可以將DISPID作為函數(shù)數(shù)組指針的索引 IDispatch叫做調(diào)度接口。它的作用何在呢?這個世上除了C++還有很多別的語言,比如VB、 VJ、VBScript、JavaScript等等。可以這么說,如果這世上沒有這么多亂七八糟的語言,那就不會有IDispatch。:-) 我們知道COM組件是C++類,是靠虛函數(shù)表來調(diào)用函數(shù)的,對于VC來說毫無問題,這本來就是針對C++而設(shè)計的,以前VB不行,現(xiàn)在VB也可以用指針了,也可以通過VTable來調(diào)用函數(shù)了,VJ也可以,但還是有些語言不行,那就是腳本語言,典型的如 VBScript、JavaScript。不行的原因在于它們并不支持指針,連指針都不能用還怎么用多態(tài)性啊,還怎么調(diào)這些虛函數(shù)啊。唉,沒辦法,也不能置這些腳本語言于不顧吧,現(xiàn)在網(wǎng)頁上用的都是這些腳本語言,而分布式應(yīng)用也是COM組件的一個主要市場,它不得不被這些腳本語言所調(diào)用,既然虛函數(shù)表的方式行不通,我們只能另尋他法了。時勢造英雄,IDispatch應(yīng)運而生。:-) 調(diào)度接口把每一個函數(shù)每一個屬性都編上號,客戶程序要調(diào)用這些函數(shù)屬性的時侯就把這些編號傳給IDispatch接口就行了,IDispatch再根據(jù)這些編號調(diào)用相應(yīng)的函數(shù),僅此而已。當然實際的過程遠比這復(fù)雜,僅給一個編號就能讓別人知道怎么調(diào)用一個函數(shù)那不是天方夜潭嗎,你總得讓別人知道你要調(diào)用的函數(shù)要帶什么參數(shù),參數(shù)類型什么以及返回什么東西吧,而要以一種統(tǒng)一的方式來處理這些問題是件很頭疼的事。IDispatch接口的主要函數(shù)是Invoke,客戶程序都調(diào)用它,然后Invoke再調(diào)用相應(yīng)的函數(shù),如果看一看MS的類庫里實現(xiàn) Invoke的代碼就會驚嘆它實現(xiàn)的復(fù)雜了,因為你必須考慮各種參數(shù)類型的情況,所幸我們不需要自己來做這件事,而且可能永遠也沒這樣的機會. 說白了,IDispatch就是Java/.Net里面的Reflection(反射)
IDispatch*是干什么用的 C++
2012-06-05 09:58bshenqing??分類:C/C++?|?瀏覽 1178 次 _variant_t((IDispatch*)mpdb, TRUE),順便解釋下這句話的意思? 2012-06-05 12:13 知識大富翁,挑戰(zhàn)答題贏iPhone! 提問者采納 IDispatch的存在是因為有些語言不支持虛函數(shù)表vtable,比如vb,asp等 它的主要作用是“接收一個函數(shù)的名稱并執(zhí)行它” 然后IDispatch有幾個函數(shù): GetIDsOfNames,取一個函數(shù)的名稱并返回其調(diào)度ID,或稱DISPID Invoke,可以將DISPID作為函數(shù)數(shù)組指針的索引 IDispatch叫做調(diào)度接口。它的作用何在呢?這個世上除了C++還有很多別的語言,比如VB、 VJ、VBScript、JavaScript等等。可以這么說,如果這世上沒有這么多亂七八糟的語言,那就不會有IDispatch。:-) 我們知道COM組件是C++類,是靠虛函數(shù)表來調(diào)用函數(shù)的,對于VC來說毫無問題,這本來就是針對C++而設(shè)計的,以前VB不行,現(xiàn)在VB也可以用指針了,也可以通過VTable來調(diào)用函數(shù)了,VJ也可以,但還是有些語言不行,那就是腳本語言,典型的如 VBScript、JavaScript。不行的原因在于它們并不支持指針,連指針都不能用還怎么用多態(tài)性啊,還怎么調(diào)這些虛函數(shù)啊。唉,沒辦法,也不能置這些腳本語言于不顧吧,現(xiàn)在網(wǎng)頁上用的都是這些腳本語言,而分布式應(yīng)用也是COM組件的一個主要市場,它不得不被這些腳本語言所調(diào)用,既然虛函數(shù)表的方式行不通,我們只能另尋他法了。時勢造英雄,IDispatch應(yīng)運而生。:-) 調(diào)度接口把每一個函數(shù)每一個屬性都編上號,客戶程序要調(diào)用這些函數(shù)屬性的時侯就把這些編號傳給IDispatch接口就行了,IDispatch再根據(jù)這些編號調(diào)用相應(yīng)的函數(shù),僅此而已。當然實際的過程遠比這復(fù)雜,僅給一個編號就能讓別人知道怎么調(diào)用一個函數(shù)那不是天方夜潭嗎,你總得讓別人知道你要調(diào)用的函數(shù)要帶什么參數(shù),參數(shù)類型什么以及返回什么東西吧,而要以一種統(tǒng)一的方式來處理這些問題是件很頭疼的事。IDispatch接口的主要函數(shù)是Invoke,客戶程序都調(diào)用它,然后Invoke再調(diào)用相應(yīng)的函數(shù),如果看一看MS的類庫里實現(xiàn) Invoke的代碼就會驚嘆它實現(xiàn)的復(fù)雜了,因為你必須考慮各種參數(shù)類型的情況,所幸我們不需要自己來做這件事,而且可能永遠也沒這樣的機會. 說白了,IDispatch就是Java/.Net里面的Reflection(反射)總結(jié)
以上是生活随笔為你收集整理的C++中IDispatch接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ template笔记(1)模板函
- 下一篇: TCP安全问题浅析