Note
本文說明.NET框架COM互通指引,該指引使用傳統的組合註冊工具(Regasm.exe)、全域組合快取,以及基於登錄檔的COM註冊。 對於現代 .NET,請使用 COM 原始碼產生或 ComWrappers API。 欲了解更多資訊,請參閱 COM 互通。
你可以執行一個名為 Assembly Registration Tool (Regasm.exe) 的命令列工具,來註冊或取消註冊 .NET Framework 組件以供 COM 使用。 Regasm.exe 會將 類別的相關信息新增至系統登錄,讓 COM 用戶端可以透明地使用 .NET Framework 類別。 類別 RegistrationServices 提供對等的功能。
對於 .NET 框架,受管理元件必須先在 Windows 登錄檔註冊,才能從 COM 用戶端啟用。 Regasm.exe 通常新增至 Windows 登錄的機碼如下表所示。 (0000000 表示實際 GUID 值。
| GUID | Description | 登錄鍵 |
|---|---|---|
| CLSID | 類別標識碼 | HKEY_CLASSES_ROOT\CLSID\{000…000} |
| IID | 介面識別碼 | HKEY_CLASSES_ROOT\Interface\{000…000} |
| LIBID | 圖書館識別碼 | HKEY_CLASSES_ROOT\TypeLib\{000…000} |
| ProgID(程式識別碼) | 程式化標識碼 | HKEY_CLASSES_ROOT\000…000 |
在 HKCR\CLSID\{0000...0000} 鍵,預設值會設定為 類別的 ProgID,並新增兩個新的具名值 Class 和 Assembly。 運行時間會從登錄讀取 Assembly 值,並將它傳遞給運行時間元件解析程式。 元件解析程式會根據名稱與版本號碼等元件資訊,嘗試尋找元件。 若要讓元件解析程式找到元件,元件必須位於下列其中一個位置:
全域組件快取(必須是強名稱的組件)。
在應用程式目錄中。 從應用程式路徑載入的元件只能從該應用程式存取。
沿著以 /codebase 選項指定的檔案路徑,Regasm.exe。
Regasm.exe 也會在 HKCR\CLSID\{0000...0000} 金鑰下建立 InProcServer32 鍵。 機碼的預設值會設定為初始化共通語言執行平台的 DLL 名稱(Mscoree.dll)。
檢視登錄資料
.NET Framework 中的 COM 互操作提供標準類別工廠實作,以建立任何 .NET 框架類別的實例。 客戶端可以在受管理的 DLL 上呼叫 DllGetClassObject 以取得類別工廠並建立物件,就像對待其他 COM 元件一樣。
InprocServer32針對子機碼,Mscoree.dll 的參考會出現,用於取代傳統的 COM 類型庫,以說明 Common Language Runtime 會建立受控物件。