型別程式庫匯出工具 (Tlbexp.exe)
型別程式庫匯出工具可以產生型別程式庫,這個型別程式庫描述定義在 Common Language Runtime 組件中的型別。
tlbexp assemblyName [/out:file] [/nologo] [/silent] [/verbose]
參數
引數 | 說明 |
---|---|
assemblyName |
要匯出型別程式庫的組件。 |
選項 | 說明 |
---|---|
/asmpath: directory |
指定要搜尋組件的位置。如果使用這個選項,則必須明確指定要搜尋參考組件的位置,包括目前的目錄在內。 當您使用 asmpath 選項時,型別程式庫匯出工具不會在全域組件快取 (GAC) 中尋找組件。 |
/help |
顯示工具的命令語法和選項。 |
/names: filename |
指定型別程式庫中名稱大小寫。filename 引數是個文字檔。檔案中的每一行指定了型別程式庫中一個名稱的大小寫。 |
/nologo |
隱藏 Microsoft 程式啟始資訊顯示。 |
/oldnames |
在發生型別名稱衝突時,強制 Tlbexp.exe 匯出裝飾型別名稱。請注意,此為 .NET Framework 2.0 版之前版本中的預設行為。 |
/out: file |
指定要產生的型別程式庫檔案 (Type Library File) 的名稱。如果省略這個選項,Tlbexp.exe 會產生一個與組件名稱 (指實際組件名稱,不一定和包含組件的檔案同名) 相同的型別程式庫和 .tlb 副檔名。 |
/silent |
隱藏成功訊息的顯示。 |
/tlbreference: typelibraryname |
強制 Tlbexp.exe 明確解析型別程式庫參考,而不需查閱登錄。例如,如果組件 B 參考組件 A,您就可以使用這個選項提供明確的型別程式庫參考,而不需依賴登錄中所指定的型別程式庫。Tlbexp.exe 會執行版本檢查,以確定型別程式庫版本是否與組件版本相符;如果不符,便會產生錯誤。 請注意,如果將 ComImportAttribute 屬性 (Attribute) 套用至介面,然後又由其他型別實作,則 tlbreference 選項仍然會查閱登錄。 |
/tlbrefpath: path |
參考型別程式庫的完整路徑。 |
/win32 |
在 64 位元電腦上編譯時,這個選項指定 Tlbexp.exe 會產生 32 位元的型別程式庫。 |
/win64 |
在 32 位元電腦上編譯時,這個選項指定 Tlbexp.exe 會產生 64 位元的型別程式庫。 |
/verbose |
指定詳細資訊模式;顯示需要產生型別程式庫的任何參考組件的清單。 |
/? |
顯示工具的命令語法和選項。 |
注意事項 |
---|
Tlbexp.exe 的命令列選項不區分大小寫,而且可以依任何順序提供。您只需要指定足夠的選項來唯一識別它。例如,/n 相當於 /nologo,且 /o:outfile.tlb 相當於 /out:outfile.tlb。 |
備註
Tlbexp.exe 會產生一個型別程式庫,其含有組件中所定義的型別定義。應用程式 (例如 Visual Basic 6.0) 可以使用產生的型別程式庫來繫結至組件中所定義的 .NET 型別。
全部組件會一次同時轉換。您無法使用 Tlbexp.exe 來為組件中所定義的型別子集產生型別資訊。
您無法使用 Tlbexp.exe 來從已經使用型別程式庫匯入工具 (Tlbimp.exe) 匯入的組件中產生型別程式庫。反而是您應該參考已經以 Tlbimp.exe 匯入的原始型別程式庫。您可以從組件 (其參考已經使用 Tlbimp.exe 匯入的組件) 中匯出型別程式庫。請參閱下列的範例章節。
Tlbexp.exe 會將產生的型別程式庫放置在目前的工作目錄或指定給輸出檔的目錄。單一組件可能導致產生多個型別程式庫。
Tlbexp.exe 會產生型別程式庫但是不會註冊它。這和組件註冊工具 (Regasm.exe) 形成對比,組件註冊工具會產生並註冊型別程式庫。若要產生並以 COM 註冊型別程式庫,請使用 Regasm.exe。
如果您未指定 /win32 或 /win64 選項當中的任一項,Tlbexp.exe 會產生與執行編譯的電腦類型 (32 位元或 64 位元電腦) 相對應之 32 位元或 64 位元的型別程式庫。為了交互編譯,您可以在 32 位元電腦上使用 /win64 選項以產生 64 位元的型別程式庫,或在 64 位元電腦上使用 /win32 選項以產生 32 位元的型別程式庫。在 32 位元的型別程式庫中,SYSKIND 值會設定為 SYS_WIN32。在 64 位元的型別程式庫中,SYSKIND 值會設定為 SYS_WIN64。所有資料型別的轉換資料 (例如,類似 IntPtr 和 UIntPtr 指標大小的資料型別) 都會適當地加以轉換。
如果您使用 MarshalAsAttribute 屬性來指定 VT_UNKOWN 或 VT_DISPATCH 的 SafeArraySubType 值,則 Tlbexp.exe 會忽略所有後續使用的 SafeArrayUserDefinedSubType 欄位。例如,假設有以下的簽章:
[return:MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_UNKNOWN, SafeArrayUserDefinedSubType=typeof(ConsoleKeyInfo))] public Array StructUnkSafe(){return null;}
[return:MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_DISPATCH, SafeArrayUserDefinedSubType=typeof(ConsoleKeyInfo))] public Array StructDispSafe(){return null;}
會產生下列型別程式庫:
[id(0x60020004)]
HRESULT StructUnkSafe([out, retval] SAFEARRAY(IUnknown*)* pRetVal);
[id(0x60020005)]
HRESULT StructDispSafe([out, retval] SAFEARRAY(IDispatch*)* pRetVal);
請注意,Tlbexp.exe 會忽略 SafeArrayUserDefinedSubType 欄位。
由於型別程式庫無法容納這些組件中的所有資訊,因此,Tlbexp.exe 在匯出處理序中可能會捨棄一些資料。如需轉換處理序的說明並且識別型別程式庫所發出每件資訊的來源,請參閱組件至型別程式庫轉換的摘要。
請注意,型別程式庫匯出工具會匯出 TypedReference 參數為 VARIANT 的方法,即使 TypedReference 物件在 Unmanaged 程式碼中不具任何意義。型別程式庫匯出工具 (Tlbexp.exe)當您匯出具有 TypedReference 參數的方法時,型別程式庫匯出工具不會產生警告或錯誤,而使用結果型別程式庫的 Unmanaged 程式碼也將無法正常執行。
Microsoft Windows 2000 (含) 以後版本都支援型別程式庫匯出工具。
範例
下列命令會產生一個和 myTest.dll
中組件同名的型別程式庫。
tlbexp myTest.dll
下列命令會以 clipper.tlb
名稱產生型別程式庫。
tlbexp myTest.dll /out:clipper.tlb
下列命令說明使用 Tlbexp.exe 來從組件 (其參考已經使用 Tlbimp.exe 匯入的組件) 中匯出型別程式庫。
首先使用 Tlbimp.exe 匯入 myLib.tlb
型別程式庫,然後將它儲存為 myLib.dll
。
tlbimp myLib.tlb /out:myLib.dll
下列命令使用 C# 編譯器來編譯 Sample.dll,
,它會參考上一個範例中所建立的 myLib.dll
。
CSC Sample.cs /reference:myLib.dll /out:Sample.dll
下列命令會產生參考 myLib.dll
之型別程式庫的 Sample.dll
。
tlbexp Sample.dll
請參閱
參考
TypeLibExporterFlags Enumeration
.NET Framework 工具
組件登錄工具 (Regasm.exe)
型別程式庫匯入工具 (TlbImp.exe)
SDK 命令提示字元