在Visual Studio中引用COM程序集与通过tlbimp.exe转换COM程序集

时间:2009-04-03 17:47:44

标签: visual-studio assemblies reference tlbimp

当我通过将COM程序集(dll)作为引用添加到Visual Studio项目中时,我可以使用生成的等效公共语言运行时程序集而不会出现问题。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

e.g。

tlbimp /out:Interop.MyCom.dll /namespace:MyCom MyCom.dll

答案 1 :(得分:2)

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

这将为您提供与visual studio生成的ilcode相同的ilcode。

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

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

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

如果执行64位和32位,请同时使用/ reference和/ tlbreference,以便它使用您在命令行上传递的interops和tlbs,而不是在注册表中捕获它们。