共用方式為


元件類別管理員實作

隨著可用元件數目的成長,管理這些元件變得越來越困難。 就它們所公開的介面以及其執行的工作而言,許多元件都提供類似的功能。

通常必須列舉可在特定內容中使用的元件。 其中範例是 OLE 複合檔中使用的 [插入物件] 對話方塊,以及 OLE 控制件中使用的 [插入控制件 ] 對話方塊。 這些對話框會列出符合複合檔或控件介面合約的所有元件(或宣告要履行)。 這些現有的類別 (OLE 檔, OLE 控制項) 並不表示確切的介面簽章。 OLE 文件必須公開一組特定的核心介面(例如 IOleObject IPersist 儲存體),但也可以公開其他介面,例如 IOleLink。

過去,元件已藉由將人類可讀取的名稱 (“Insertable”、“Control” 等) 新增為對應至 元件之 HKEY_CLASSES_ROOT\CLSID\{...} 登錄機碼的子機碼來標記元件。 這適用於類別的集中定義,但當許多獨立合作物件定義新類別時,可能會發生名稱衝突。 如同 COM 的其他區域,提供可延伸命名空間的解決方案在於使用全域唯一標識碼 (GUID)。 除了使用人類可讀取的名稱,而是將唯一的數位 (CATID) 指派給每個類別。

現有分類的另一個限制是,它僅限於表示元件本身的功能。 許多元件需要來自容器的特定功能。 當這類元件插入容器時,即使元件符合其中一個類別所隱含的合約,插入仍可能會失敗或行為意外。 若要列舉在某些情況下可以成功使用的元件,必須考慮元件和容器的功能。

由於這些考慮,已對現有的分類進行下列變更:

  • 類別是使用全域唯一標識碼的 CATID 來表示。
  • HKEY_CLASSES_ROOT\CLSID 登錄機碼的 Components 子機碼下,開發了兩個不同的子機碼「實作類別」和「必要類別」。 這些子機碼包含元件所提供的CATID清單,或元件容器必須提供的清單。

為了簡化元件類別的管理,類別會列在登錄的中央位置: HKEY_CLASSES_ROOT\元件類別。 此機碼會列出已安裝的類別,其CATID和具有本地化的人類可讀取名稱。

如需詳細資訊,請參閱下列主題: