2009-11-16 27 views
2

我正在處理一組基本上是插件的COM服務器。每個插件都有一組由另一個組件管理的配置數據,配置數據的主鍵是插件的ProgID。當插件需要訪問一個配置項時,它會發起一個調用並傳遞其ProgID和所需屬性的名稱。這是一個傳統設計,我必須保持向後兼容性。多個ProgID可以指向相同的ClsID嗎?

我現在需要加載每個插件的多個實例,每個實例都有一組不同的配置數據。我正在考慮的解決方案是爲每個插件創建多個獨特的ProgID,每個ProgID將指向插件的單個ClsId。因此,插件的每個實例都將通過其ProgID進行識別,ProgID仍然用作配置數據的主鍵,並且所有內容都100%向後兼容。

所以,問題:

  1. 這是一個可以接受的技術? (多個ProgID都指向一個ClsID)。
  2. 當我的插件加載時,它能夠告訴哪個ProgID被用來創建它嗎?

回答

4

PROG IDS通常用於兩種方式:檢測對應於一個程序ID(CLSIDFromProgID()函數)一類ID - 這是用來以後調用CoCreateInstance() - 和檢測程序ID爲給定class id - 通常用於顯示類id的人性化版本。

這些映射意味着有一個默認值等於類ID的HKCR {ProgId} \ CLSID鍵和一個默認值等於ProgId的HKCR \ CLSID {classid} \ ProgID鍵,這意味着映射是一對一的。您將無法在一個類ID下使用多個編號。

COM組件通過調用CoCreateInstance()來加載,該組件通過使用包含的CLSIDFromProgID()以可能的方式獲得的類id來獲取。組件無法告訴如何獲得類ID。

+0

+1對於一個偉大的迴應,這可能最終會成爲公認的答案,除非有人想在未來幾天添加任何東西。 – 2009-11-17 15:16:57

相關問題