COM 類型定義通常位於類型連結庫中。 相反地,符合 CLS 規範的編譯程式會在元件中產生類型元數據。 類型資訊的兩個來源大不相同。 本主題描述從類型庫產生元數據的技術。 產生的元件稱為 Interop 元件,其所包含的類型資訊可讓 .NET Framework 應用程式使用 COM 類型。
有兩種方式可將此類型資訊提供給您的應用程式:
使用僅限設計時間的 Interop 元件:從 .NET Framework 4 開始,您可以指示編譯程式將 Interop 元件的類型資訊內嵌至可執行檔。 編譯程式只會內嵌應用程式所使用的類型資訊。 您不需要使用應用程式部署 Interop 元件。 這是建議的技術。
部署 Interop 組件:您可以為 Interop 組件建立標準參考。 在此情況下,Interop 元件必須與您的應用程式一起部署。 如果您採用這項技術,且未使用私人 COM 元件,請一律參考您打算納入受管理程式碼之 COM 元件作者所發行的主要 Interop 元件(PIA)。 如需產生和使用主要 Interop 元件的詳細資訊,請參閱 主要 Interop 元件。
當您使用僅供設計時使用的 Interop 程式集時,您可以從 COM 元件作者發布的主要 Interop 程式集中嵌入類型資訊。 不過,您不需要部署應用程式的主要 Interop 元件。
使用僅限設計時間的 Interop 元件可減少應用程式的大小,因為大部分的應用程式不會使用 COM 元件的所有功能。 編譯程式在內嵌類型資訊時非常有效率;如果您的應用程式只在 COM 介面上使用某些方法,則編譯程式不會內嵌未使用的方法。 當內嵌類型資訊的應用程式與另一個這類應用程式互動,或與使用主要 Interop 元件的應用程式互動時,Common Language Runtime 會使用類型等價規則來判斷兩個具有相同名稱的類型是否代表相同的 COM 類型。 您不需要知道這些規則即可使用 COM 物件。 不過,如果您對規則感興趣,請參閱 類型等價和內嵌 Interop 類型。
產生元數據
COM 類型連結庫可以是具有 .tlb 擴展名的獨立檔案,例如Loanlib.tlb。 某些類型連結庫內嵌在 .dll 或 .exe 檔案的資源區段中。 類型庫資訊的其他來源是 .olb 和 .ocx 檔案。
找到包含目標 COM 類型實作的類型庫之後,您有下列選項可用來產生包含類型元數據的 Interop 元件:
Visual Studio
Visual Studio 會自動將類型庫中的 COM 類型轉換成元件中的元數據。 如需指示,請參閱 如何:將參考新增至類型連結庫。
-
類型庫匯入工具提供命令行選項來調整產生的 Interop 檔案中的元數據、從現有的類型庫匯入類型,以及產生 Interop 元件和命名空間。 如需指示,請參閱 如何:從類型庫產生 Interop 元件。
System.Runtime.InteropServices.TypeLibConverter 類別
這個類別提供方法,可將類型庫中的coclass和介面轉換成組件內的中繼資料。 其會產生與 Tlbimp.exe相同的元數據輸出。 不過,不同於 Tlbimp.exe,類別 TypeLibConverter 可以將記憶體內部類型連結庫轉換成元數據。
自訂包裝函式
當類型庫無法使用或不正確時,其中一個選項是在 Managed 原始碼中建立類別或介面的重複定義。 接著,您會使用以運行時為目標的編譯器編譯源代碼,以在組件中產生元數據。
若要手動定義 COM 類型,您必須能夠存取下列專案:
所定義之 Coclass 和介面的精確說明。
編譯程式,例如 C# 編譯程式,可以產生適當的 .NET Framework 類別定義。
類型連結庫對元件轉換規則的知識。
撰寫自定義包裝函式是進階技術。 如需如何產生自定義包裝函式的其他資訊,請參閱 自定義標準包裝函式。
如需 COM Interop 匯入程式的詳細資訊,請參閱 類型連結庫至元件轉換摘要。