1 回答

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