com - 从托管 C++ (C++/CLI) 生成 COM 可见程序集

标签 com interop c++-cli managed-c++

我需要开发一些可以从 VB6 使用 Managed C++ (C++/CLI) 调用的类。

我首先用 C# 开发了一个示例,我可以毫无问题地通过 COM 使用程序集
只需使用设置“注册 COM 互操作”和“使程序集 COM 可见”(并使用属性 [ClassInterface(ClassInterfaceType.AutoDual)] 使方法在 VB6 中可用。

之后,我尝试将示例转换为 C++/CLI,但没有成功。我用 [ClassInterface(ClassInterfaceType.AutoDual)] 属性创建了相同的类。我已经设置了“嵌入式 IDL”设置来指定输出 TLB,但 TLB 不是自动生成的。如果我在生成的 DLL 上使用 tlbexp 实用程序,我会得到一个可以在 VB6 中导入的 tlb,但是当我尝试创建一个实例时,我得到一个“ActiveX 组件无法创建对象 (429)”

我还需要对项目做什么才能让它运行?

提前致谢。

最佳答案

没什么可做的,但您从未提到过注册程序集。 C++ IDE 没有“注册 COM 互操作”选项。从 Visual Studio 命令提示符,在程序集上运行 Regasm.exe 以注册它。如果不将程序集放入 GAC,则需要/codebase 选项。并且/tlb 选项会生成类型库,从而不需要 tlbexp.exe。

关于com - 从托管 C++ (C++/CLI) 生成 COM 可见程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4053589/

相关文章:

c++ - 来自变量的模板类型

c# - 为什么 C# PInvoke 不能与非托管 DirectX 一起工作

c# - 在托管 DLL 中加载 C++ DLL 时出现 EEFileLoadException

c++ - 如何编写在函数执行过程中收集垃圾的测试用例?

vba - Visio 形状 ID 溢出

c++ - 有没有办法查询 _com_ptr_t 对象的当前引用计数?

javascript - 如何将 SAFEARRAY(字节数组)放入 HTML 隐藏字段

C# Excel 自动化导致 Excel 内存泄漏

c# - 如何在 .NET Interop.Excel.Workbooks.OpenText 中指定编码

c++ - 为什么不能跨程序集删除指针?