3

当我通过将 COM 程序集 (dll) 作为参考添加到 Visual Studio 项目中时,我可以毫无问题地使用生成的等效公共语言运行时程序集。

但是,如果我尝试使用 tlbimp 将相同的 COM 程序集转换为公共语言运行时程序集,则会遇到各种问题。

有没有办法复制 Visual Studio 与 tlbimp 一起使用的设置?或者换句话说,有没有办法通过使用 tlbimp 来生成与 Visual Studio 相同的互操作类?

4

2 回答 2

2

我自己找到了解决方案。要复制 Visual Studio 与 tlbimp 一起使用的设置,您只需使用 /out 和 /namespace 标志。

out 标志用于为“Interop”添加前缀。在生成的文件上,命名空间标志用于将默认命名空间设置为 COM 程序集的名称。

例如

tlbimp /out:Interop.MyCom.dll /namespace:MyCom MyCom.dll
于 2009-04-05T10:37:08.157 回答
2

还有一点,你还需要使用 /sysarray 选项,否则你会发现你的应用程序会随机崩溃,假设 EngineExceptions 引用内存损坏。

这将为您提供与 Visual Studio 生成的相同的 ilcode。

指定 /namespace 参数以匹配(包括大小写) tlb 文件中的 library 子句。(可以使用oleview.exe直接查看tlbs)。

[其余的大脑转储] 使用 tlbimp 的好处,尤其是来自 msbuild 脚本的好处是,您可以让您的产品为 64 位和 32 位目标正确构建。

否则,您最终会使用最后一次 regsvr32'd 的 tlb 获得 64 位构建目标,这很可能是具有 32 位接口的 32 位 com 对象。

如果使用 64 位和 32 位,请同时使用 /reference 和 /tlbreference,以便它使用您在命令行上传递的互操作和 tlb,而不是在注册表中为它们钓鱼。

于 2010-04-28T05:41:05.990 回答