1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
C++是一個(gè)很底層的語(yǔ)言,直接與指針和內(nèi)存二進(jìn)制數(shù)據(jù)打交道的,不存在那些高層語(yǔ)言中的語(yǔ)言原生Object的類型。C++中可以用void*保存各個(gè)對(duì)象的指針,但它和Object對(duì)象是有本質(zhì)的區(qū)別的。
你目前的需求,我估計(jì)是要做COM開發(fā)。C++里面調(diào)用COM比較麻煩,不會(huì)像VB或C#那樣給你屏蔽底層的細(xì)節(jié),你需要了解COM的許多底層機(jī)制才能寫好相應(yīng)的代碼。
VB中你簡(jiǎn)單的寫一句CreateInstance("WinHttp.WinHttpRequest.5.1")就可以直接得到WinHttpRequest對(duì)象了,并且得到了它上面的IWinHttpRequest接口,你可以直接拿來(lái)使用。
VB在背后替你做了很多事情,所以你可以很簡(jiǎn)單的使用,但在C++中就不一樣了,你必須一步一步自己來(lái)。
VB在背后幫你做了以下事情:
1. 先根據(jù)ProgID(比如 "WinHttp.WinHttpRequest.5.1")去找到這個(gè)COM類對(duì)應(yīng)的CLSID。使用CLSIDFromProgID()函數(shù)使用ProgID查找對(duì)應(yīng)的CLSID。
2. 調(diào)用CoCreateInstance(),創(chuàng)建指定CLSID對(duì)應(yīng)的COM對(duì)象,得到一個(gè)IUnknown接口指向這個(gè)COM對(duì)象。
3. 調(diào)用IUnknown接口上的QueryInterface方法,獲得這個(gè)COM對(duì)象上指定的接口(比如IWinHttpRequest。一個(gè)COM對(duì)象上可能有多個(gè)接口,你得根據(jù)IID來(lái)指定其中一個(gè))。
至此你才能拿到可以使用的IWinHttpRequest接口。而在C++中,這些都要你自己搞定。
期間涉及到很多COM的概念,如果沒有了解過(guò)的話可能會(huì)很難弄明白,所以如果要在C++下開發(fā)COM相關(guān)的東西,除非你只想照貓畫虎應(yīng)付一下,否則建議還是補(bǔ)一下COM和ATL的相關(guān)基礎(chǔ)知識(shí)。
- 1 回答
- 0 關(guān)注
- 821 瀏覽
添加回答
舉報(bào)