Tlbimp.exe (型別程式庫匯入工具)
更新:2011 年 4 月
型別程式庫匯入工具會將 COM 型別程式庫中的型別定義轉換為 Common Language Runtime 組件中的等效定義。 Tlbimp.exe 的輸出是二進位檔案 (組件),它含有原來型別程式庫中所定義型別的執行階段中繼資料 (Metadata)。 您可以使用像 ildasm.exe 這類的工具來檢查這個檔案。
這個工具會自動隨 Visual Studio 和 Windows SDK 一起安裝。 若要執行工具,建議您使用 Visual Studio 命令提示字元或 Windows SDK 命令提示字元。 這些公司可讓您輕鬆地執行工具,而不需瀏覽至安裝資料夾。 如需詳細資訊,請參閱Visual Studio 和 Windows SDK 命令提示字元。
如果您已經在電腦上安裝 Visual Studio:在工作列上,依序按一下 Start、All Programs、Visual Studio、Visual Studio Tools,然後按一下 Visual Studio Command Prompt。
-或-
如果您已經在電腦上安裝 Windows SDK:在工作列上,依序按一下 Start、All Programs、Windows SDK 的資料夾,然後按一下Command Prompt(或 CMD Shell)。
在命令提示字元中輸入下列文字:
tlbimp tlbFile [options]
參數
引數 |
描述 |
---|---|
tlbFile |
任何含有 COM 型別程式庫之檔案的名稱。 |
選項 |
描述 |
---|---|
/asmversion:versionNumber |
指定要產生之組件的版本號碼。 以 major.minor.build.revision 格式來指定 versionNumber。 |
/delaysign |
指定由 Tlbimp.exe 以延遲簽署使用強式名稱,簽署產生的組件。 您必須指定這個選項來配合 /keycontainer:、/keyfile: 或 /publickey: 選項。 如需延遲簽署處理序的詳細資訊,請參閱延遲簽署組件。 |
/help |
顯示工具的命令語法和選項。 |
/keycontainer:containername |
使用 containername 所指定之金鑰容器中的公開/私密金鑰組,以強式名稱進行簽署所產生的組件。 |
/keyfile:filename |
使用 filename 中的發行者正式公開/私密金鑰組,以強式名稱進行簽署所產生的組件。 |
/namespace:namespace |
指定要在其中產生組件的命名空間。 |
/noclassmembers |
避免 Tlbimp.exe 將成員加入類別中。 如此可避免可能發生的 TypeLoadException。 |
/nologo |
隱藏 Microsoft 程式啟始資訊顯示。 |
/out:filename |
指定要將中繼資料定義寫入其中的輸出檔、組件及命名空間的名稱。 如果型別程式庫指定了明確控制組件之命名空間的介面定義語言 (IDL) 自訂屬性 (Attribute),那麼 /out 選項對組件的命名空間就沒有作用。 如果您不指定這個選項,Tlbimp.exe 會將中繼資料寫入到與輸入檔所定義之實際型別程式庫同樣名稱的檔案,並指派 .dll 副檔名給它。 如果輸出檔與輸入檔同名,這個工具將會產生錯誤來防止覆寫型別程式庫。 |
/primary |
對指定的型別程式庫產生主要 Interop 組件。 指示產生這個組件之型別程式庫發行者的資訊會被加入到組件。 透過指定主要 Interop 組件,您可以區別發行者的組件與使用 Tlbimp.exe 從型別程式庫建立的任何其他組件。 如果您是要以 Tlbimp.exe 匯入之型別程式庫的發行者,請只使用 /primary 選項。 請注意,您必須以強式名稱簽署主要 Interop 組件。 如需詳細資訊,請參閱主要的 Interop 組件。 |
/publickey:filename |
指定含有要用來簽署所產生組件之公開金鑰的檔案。 如果您指定 /keyfile: 或 /keycontainer: 選項而不是 /publickey:,Tlbimp.exe 將會從 /keyfile: 或 /keycontainer: 提供的公開/私密金鑰組產生公開金鑰。 /publickey: 選項支援測試金鑰和延遲簽署的案例。 檔案使用的是 Sn.exe 所產生的格式。 如需詳細資訊,請參閱 強式名稱工具 (Sn.exe) 中 Sn.exe 的 p 選項。 |
/reference:filename |
指定要用來解析在目前型別程式庫之外所定義型別之參考的組件檔。 如果您不指定 /reference 選項,Tlbimp.exe 會自動以遞迴方式匯入其型別程式庫正被匯入參考的任何外部型別程式庫。 如果您指定了 /reference 選項,這個工具會在匯入其他型別程式庫之前,先嘗試解析被參考組件中的外部型別。 |
/silent |
隱藏成功訊息的顯示。 |
/strictref |
如果這個工具無法解析目前組件中、以 /reference 選項指定的組件中或是已登錄主要 Interop 組件 (PIA) 中的所有參考,就不要匯入型別程式庫。 |
/strictref:nopia |
與 /strictref 相同,但是會忽略 PIA。 |
/sysarray |
指定要由這個工具匯入 COM 樣式的 SafeArray 做為 Managed System.Array 類別型別。 |
/tlbreference:filename |
指定用來解析型別程式庫參考的型別程式庫檔案,而不需要查閱登錄。 請注意,這個選項將不會載入某些較舊的型別程式庫格式。 但是,您仍然可以透過登錄或目前的目錄,隱含載入較舊的型別程式庫格式。 |
/transform:transformName |
如 transformName 參數所指定,轉換中繼資料。 為 transformName 參數指定 dispret,將分派介面 (Dispinterface) 上之方法的 [out, retval] 參數轉換為傳回值。 如需這個選項的詳細資訊,請參閱稍後在本主題中的範例。 |
/unsafe |
產生不經 .NET Framework 安全性檢查的介面。 呼叫以這種方式公開的方法可能會造成安全性的風險。 除非您很清楚公開這種程式碼的風險,否則不應使用這個選項。 |
/verbose |
指定詳細資訊模式;顯示匯入之型別程式庫的其他資訊。 |
/VariantBoolFieldToBool |
將結構中的 VARIANT_BOOL 欄位轉換為 Boolean。 |
/? |
顯示工具的命令語法和選項。 |
注意事項 |
---|
Tlbimp.exe 的命令列選項不區分大小寫,而且可以依任何順序提供。您只需要指定足夠的選項來唯一識別它。因此,/n 相當於 /nologo,且 /ou:outfile.dll 相當於 /out:outfile.dll。 |
備註
Tlbimp.exe 會一次執行整個型別程式庫的轉換。 您不能使用這個工具對單一型別程式庫中所定義之型別的子集產生型別資訊。
有時候會需要甚至必須能夠指派強式名稱給組件。 因此,Tlbimp.exe 包含了提供產生以強式名稱命名之組件所需資訊的選項。 /keyfile: 和 /keycontainer: 這兩個選項都會以強式名稱簽署組件。 所以,一次只提供一個這種選項是很合理的。
在從含有多個型別程式庫的模組匯入型別程式庫時,可以選擇性地將資源 ID 附加到型別程式庫檔案。 只有在這個檔案是位於目前的目錄中,或者您指定了完整路徑時,Tlbimp.exe 才能夠找到這個檔案。 請參閱本主題稍後的範例。
範例
下列命令會產生與 myTest.tlb 中所找到的型別程式庫同名且副檔名為 .dll 的組件。
tlbimp myTest.tlb
下列命令會以 myTest.dll 名稱產生組件。
tlbimp myTest.tlb /out:myTest.dll
下列命令會產生與 MyModule.dll\1 中所指定之型別程式庫同名且副檔名為 .dll 的組件。 MyModule.dll\1 必須位於目前的目錄。
tlbimp MyModule.dll\1
下列命令會針對 TestLib.dll 型別程式庫產生名稱為 myTestLib.dll 的組件。 /transform:dispret 選項會將型別程式庫中分派介面上之方法的所有 [out, retval] 參數,轉換為 Managed 程式庫中的傳回值。
tlbimp TestLib.dll /transform:dispret /out:myTestLib.dll
前一個範例中的 TestLib.dll 型別程式庫包括名為 SomeMethod 的分派介面,會傳回虛值 (Void),並具有 [out, retval] 參數。 以下程式碼是 TestLib.dll 中 SomeMethod 的輸入型別程式庫方法簽章。
void SomeMethod([out, retval] VARIANT_BOOL*);
指定 /transform:dispret 選項會使 causes Tlbimp.exe 將 SomeMethod 的 [out, retval] 參數轉換為 bool 傳回值。 下列是指定 /transform:dispret 選項時,Tlbimp.exe 在 myTestLib.dll Managed 程式庫中為 SomeMethod 產生的方法簽章。
bool SomeMethod();
如果您使用 Tlbimp.exe 為 TestLib.dll 產生 Managed 程式庫,而不指定 /transform:dispret,則工具會在 myTestLib.dll Managed 程式庫中為 SomeMethod 產生下列方法簽章。
void SomeMethod(out bool x);
請參閱
參考
Visual Studio 和 Windows SDK 命令提示字元
概念
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2011 年 4 月 |
加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。 |
資訊加強。 |
2010 年 5 月 |
新增缺少的參數。 |
內容 Bug 修正。 |