簡體   English   中英

如何枚舉實現特定COM接口的所有coclass?

[英]How To Enumerate All coclasses That Implement A Particular COM Interface?

我將盡可能簡單地描述問題;

假設我們有一個定義了幾個接口的com客戶端。

為了改善我們的com客戶端的功能; 幾家獨立公司開發和部署實現該接口的com服務器。 目標計算機可能具有實現相同接口的com服務器。

現在問題在於此;

我們的com客戶端不知道目標機器上的com服務器,因為它們是獨立開發的。 但是,我們仍然可以要求獨立公司遵循特定的安裝程序。

現在問題是這樣的;

我們應該使用什么樣的技術來找出部署在目標機器上的所有兼容的com服務器,然后實例化所需的對象?

我知道沒有標准的COM編目服務,盡管COM +可能有一些東西。 看看HKCR\\Component Categories ,你會發現組件類型的GUID。 與0DE86A57-2BAA-11CF-A229-00AA003D7352類似,描述為“Class implements IPersistPropertyBag”。 一個coclass在其CLSID\\{guid}\\Implemented Categories聲明了這個相同的guid。 這似乎是您的場景的一個很好的匹配。

你必須選擇一個guid並告訴組件作者。 他們必須使用安裝程序編寫Implemented Categories鍵。

通過CLSID鍵仍然是一個相當尷尬的困難,你不想經常這樣做。 但至少你不必加載DLL來發現接口,這可能會產生各種令人討厭的副作用。 我建議在“選項”菜單中選擇一個對話框,讓用戶開始掃描並選擇,這也是禁用行為不當組件的好方法。

順便說一下,這可能導致的支持性疼痛通常會使應用程序在“已批准”列表中運行。

漢斯有個好主意。

我之前沒有使用過組件類別,但我建議您不要直接觸摸注冊表,因為MS提供了訪問組件類別的API。 看一下這個:

http://msdn.microsoft.com/en-us/library/ms692551(v=vs.85).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM