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

Visual studio 在Visual Studio中引用COM程序集与通过tlbimp.exe转换COM程序集,visual-studio,assemblies,reference,tlbimp,Visual Studio,Assemblies,Reference,Tlbimp,当我将COM程序集(dll)作为引用添加到Visual Studio项目中时,我可以毫无疑问地使用生成的等效公共语言运行时程序集 但是,如果我尝试使用tlbimp将同一COM程序集转换为公共语言运行时程序集,我会遇到各种问题 是否有方法复制Visual Studio与tlbimp一起使用的设置? 或者换句话说,有没有一种方法可以通过使用tlbimp生成与visual studio相同的互操作类?我自己找到了解决方案。要复制VisualStudio与tlbimp一起使用的设置,只需使用/out和/

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

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

是否有方法复制Visual Studio与tlbimp一起使用的设置?
或者换句话说,有没有一种方法可以通过使用tlbimp生成与visual studio相同的互操作类?

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

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

e、 g


还有一点,您还需要使用/sysarray选项,否则您会发现您的应用程序将随机崩溃,并出现假定的EngineeException,原因是内存损坏

这将为您提供与VisualStudio生成的ilcode相同的ilcode

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

[剩余的大脑转储] 使用tlbimp的好处是,特别是从msbuild脚本中,您可以让产品为64位和32位目标正确构建

否则,最终将使用上一个regsvr32的TLB生成64位构建目标,这些TLB很可能是具有32位接口的32位com对象

如果执行64位和32位操作,请同时使用/reference和/tlbreference,以便它使用在命令行上传递的互操作和TLB,而不是在注册表中查找它们

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