Widows 注冊表
HKEY_CLASSES_ROOT在此關鍵字之下,可以看到有一個CLSID關鍵字。在CLSID關鍵字之下列有系統中安裝的所有組件的CLSID。注冊表CLSID是一個具有如下格式的串:00000010-0000-0010-8000-00AA006D2EA4
HKEY_CLASSES_ROOT的開頭,列出的將是各種應用程序所注冊的文件擴展名。在擴展名之后,可以看到許多其他的名字。此類名字的大多數被稱作是ProgID,表示是程序員定義的標識符。某些名稱表示的不是ProgID而是一些特殊的關鍵字.
如
- CLSID
- AppID—此關鍵字下的子關鍵字的作用是將某個APPID(應用程序ID)映射成某個遠程服務器名稱。分式COM(DCOM)將用到此關鍵字。
- 組件類別—注冊表的這一分支可以將CATID(組件類別ID)映射成某個特定的組件類別。
- Interface—此關鍵字用於將IID映射成與某個接口相關的信息。這些信息主要用於在跨進程邊界使用接口的情況。
- Licenses—保存的是授權使用COM組件的一些認可信息。
- TypeLib—類型庫關鍵字所保存的是關於接口成員函數所用參數的信息。另外還有其他一些信息。此關鍵字可以將一個LIBID映射成存儲類型庫的文件名稱。
ProgID:所謂ProgID指的是程序員給某個CLSID指定的一個程序員易記的名稱。
ProgID命名約定
<Program>.<Component>.<Version>
如下圖:
其中如WPP.Application是版本無關ProgID,根據其值可在CLSID下找到相應鍵,以此找到相應信息,如組件最新版本信息。WPP.Appplication.1是版本相關的ProgID,根據其CLSID值可在找到該版本組件的信息。
ProgID注冊表格式
ProgID及與版本無關的ProgID被列在組件CLSID下面。
ProgID的主要作用是獲取相應的CLSID。在每一個CLSID項中查找查個ProgID將是非常低效的。因此在 的下面也將直接列出ProgID。由於ProgID不是針對最終用戶而定義的,因此ProgID關鍵字的缺省值為用戶易記的名稱。在 之下有一個名為CLSID的關鍵字,其缺省值為組件的CLSID。如下圖所示:
與版本號無關的ProgID 也直接被列在HKEY_CLASSES_ROOT下面。它們還有另外一個關鍵字CurVer,其缺少值為組件當前版本的ProgID
ProgID和CLSID的轉換
CLSIDFromProgID
ProgIDFromCLSID
組件的自注冊
為把組件注冊到注冊表,在DLL一定要輸出如下兩個函數:
STDAPI DllRegisterServer(); // 注冊
STDAPI DllUnregisterServer(); // 反注冊
我們使用REGSVR32.exe注冊某個組件或反注冊某個組,其實就是調用這兩個函數的。