Windows下,使用dumpcpp 方式访问 COM 接口的方法
本人在windows上進(jìn)行開發(fā),主要是使用 ATL 進(jìn)行 COM開發(fā),然后使用 MFC 作客戶端調(diào)用COM接口。后來自己想寫個輔助的開發(fā)工具,也想學(xué)習(xí)QT這個開發(fā)框架,所以就決定使用 QT 開發(fā)這個輔助的工具。但由于對 QT 不熟悉,所以不懂得如何調(diào)用 COM 接口,并且關(guān)于這方面的資料也不多。后來在 XChinux 的指導(dǎo)下,簡單地看了下 QAxContainer模塊的內(nèi)容,明白了調(diào)用 COM 接口的方法還是有許多的,但我比較喜歡通過 dumpcpp 的方式生成 QT 對 COM 接口的 C++ 包裝類,再調(diào)用。這里有個好處就是可以使用代碼自動完成功能,而省去了通過函數(shù)原型調(diào)用還要一個一個地查看接口方法原型的工作。
????? 下面這些步驟主要是根據(jù) QT 的 DUMPCPP 工具所寫的,自己加以實踐的成果,希望對需要這方面知識的人能夠省去查找一大堆資料的麻煩。
1 使用庫?
?? ?構(gòu)造使用COM對象和ActiveX控件的Qt應(yīng)用程序,需要向.pro文件中加入?
?? ?來連接到QAxContainer模塊 。
1.1. 配置QAxContainer應(yīng)用程序?
??? QaxContainer庫是靜態(tài)的,因此使用這個模塊的時候不需要重新分配任何額外的文件。但要注意,你所使用的提供ActiveX服務(wù)的二進(jìn)制文件必須被安裝在目標(biāo)系統(tǒng)中,因此你需要把它們裝在你的發(fā)布包中并在你的應(yīng)用程序安裝過程中為它們注冊。?
2. 初始化COM對象?
???? 可以通過使用QAxBase::setControl() 或 直接把對象的名字傳到QAxBase子類的構(gòu)造器中來初始化一個COM對象。?
???? 控件能通過多種格式指定,但最快且功能最強(qiáng)的格式是直接使用對象的Class ID(CLSID)。 Class ID能考慮到這個對象涉及別的機(jī)器時信息的變化,而且能為需要license的控件包括一個license key。?
3. 訪問對象API?
模塊提供了訪問COM對象的Qt API來取代COM的數(shù)據(jù)類型。有4種方法去調(diào)用訪問COM對象的API,這里只介紹第一種:?
???????? ? Generating a C++ namespace
???????? ? Call-by-name
???????? ? Through a script engine
???????? ? Using the native COM interfaces
3.1. 生成 C++ 命名空間
??? 用dumpcpp 工具可以為想要訪問的類型庫生成一個C++名空間。需要手動對你要用的類型庫使用這個工具, 或者也可以通過向.pro文件中的變量TYPELIBS添加類型庫來把它整合到編譯系統(tǒng)中(我自己試過,但沒成功,不知道有沒有人成功過,所以我使用手動生成C++包裝類的方式):?
?? ?注意,dumpcpp不一定能列出類型庫中所有的API。 把生成的頭文件包含進(jìn)你的代碼中,通過生成的C++類來訪問對象API。 更多信息可以參考示例Qutlook。
3.2 使用 dumpcpp 工具生成類型庫的步驟:
3.2.1
?? ?先將 dumpcpp 工具所在的 bin 目錄添加到系統(tǒng)路徑中。
3.2.2
?? ??運行 cmd 命令,打開命令行窗口,并輸入如下的命令:
??? 其中,-n zserver 參數(shù)表示將COM接口導(dǎo)出為 zserver命名空間,后面花括號中的內(nèi)容表示COM接口的CLSID,注意,這樣導(dǎo)出將會在指定目錄產(chǎn)生兩個C++文件: zserver.h 與zserver.cpp,并且導(dǎo)出的文件中包含COM接口所在的組件的全部接口信息。即,如果zserver組件中含有 Interface1 與Interface2 兩個接口,使用 dumpcpp 命令時,參數(shù)用的是 Inteface1 的接口ID,那么導(dǎo)出的C++文件中將包含Interface2 接口的信息。
3.2.3
?? 將導(dǎo)出的命名空間添加到 QT 工程所在的目錄下,并添加到工程的 pro 文件中,即可正常使用。注意使用命名空間前綴。
?
轉(zhuǎn)自:http://www.qtcn.org/bbs/read.php?tid=23559
總結(jié)
以上是生活随笔為你收集整理的Windows下,使用dumpcpp 方式访问 COM 接口的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt文档阅读笔记-qmake入门指南
- 下一篇: Linux学习笔记-使用管道通信实现ca