类型库导出程序 (Tlbexp.exe)

类型库导出程序生成一个类型库,该类型库描述公共语言运行库程序集中定义的类型。

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

指定要生成的类型库文件的名称。如果省略该选项,则 Tlbexp.exe 将生成一个与程序集的名称(实际的程序集名称,不一定与包含程序集的文件同名)且具有 .tlb 扩展名的类型库。

/silent

取消显示成功消息。

/tlbreference: typelibraryname

强制 Tlbexp.exe 在不参考注册表的情况下显式解析类型库引用。例如,如果程序集 B 引用程序集 A,则可使用此选项来提供显式类型库引用而不依赖于注册表中指定的类型库。Tlbexp.exe 将执行版本检查以确保类型库版本与程序集版本相匹配,否则将生成错误。

注意,在将 ComImportAttribute 属性应用于一个接口,然后该接口由另一类型实现的情况下,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。相应地转换所有数据类型转换(例如指针大小的数据类型,如 IntPtrUIntPtr)。

如果使用 MarshalAsAttribute 属性指定 VT_UNKOWNVT_DISPATCHSafeArraySubType 值,则 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 可能会放弃一些数据。有关对转换过程的说明和发出到类型库中的每条信息的源的标识,请参见有关从程序集转换到类型库的摘要

注意,类型库导出程序导出具有 VARIANT 类型的 TypedReference 参数的方法,尽管该 TypedReference 对象在非托管代码中没有意义。类型库导出程序 (Tlbexp.exe)在导出具有 TypedReference 参数的方法时,类型库导出程序不会生成警告或错误,使用结果类型库的非托管代码不会正确运行。

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.dllSample.dll 生成类型库。

tlbexp Sample.dll

请参见

参考

TypeLibExporterFlags Enumeration
.NET Framework 工具
程序集注册工具 (Regasm.exe)
类型库导入程序 (Tlbimp.exe)
SDK 命令提示

其他资源

有关从程序集转换到类型库的摘要