2012-11-13 85 views
3

我需要編寫一個動態提取COM對象的progid的函數。C++如何獲得COM對象Coclass在運行時的progid

這可能嗎?

這樣做的最佳方法是什麼?

編輯:我需要處理實現IProvideClassInfo

+0

也許這是有用的:http://stackoverflow.com/questions/1272061/how-to-find-out-a-com-prog-id – Lucian

+0

謝謝,但我沒有找到我的答案,它涉及c#/。NET – Goldorak84

回答

5

首先的所有組件類,也不能保證該信息是排在首位可用。即使你只是使用ProgID實例化一個對象,你也可能不願意把它取回來。

最簡單的方法是查詢IPersist之一和朋友(IPersistStream等)的接口,並調用IPersist::GetClassID獲得CLSID。然後使用ProgIDFromCLSID或通過註冊表查找轉換爲ProgID。

另一種選擇是查詢IProvideClassInfoIProvideClassInfo2以這種替代方式訪問感興趣的CLSID。

如果以上兩種方法都不起作用,則第三種方法是查詢IDispatch並嘗試打開類型庫,然後遍歷查找coclass信息。

+0

非常完整的答案!我需要處理實現的IProvideClassInfo的所有對象,所以我使用此選項來獲取CLSID – Goldorak84