从托管 c++ 生成 COM 可见程序集(C++/CLI)
我需要开发一些可以使用托管 C++ (C++/CLI) 从 VB6 调用的类。
我首先用 C# 开发了一个示例,我可以通过 COM 使用该程序集,没有任何问题 只需使用设置“注册 COM 互操作”和“使程序集 COM 可见”(并使用属性 [ClassInterface(ClassInterfaceType.AutoDual)] 使方法在 VB6 中可用。
之后,我尝试将示例转换为 C++/CLI,而无需我已经使用 [ClassInterface(ClassInterfaceType.AutoDual)] 属性创建了相同的类,我已设置“嵌入式 IDL”设置来指定输出 TLB,但如果我使用 tlbexp util,则不会自动生成 TLB。在生成的 DLL 上,我得到了一个可以在 VB6 中导入的 tlb,但是当我尝试创建一个实例时,我得到一个“ActiveX 组件无法创建对象 (429)”
我还需要对项目做些什么才能让它预先
感谢。
I need to develop some classes that should be callable from VB6 with Managed C++ (C++/CLI).
I've developed first a sample in C# and I can use the assembly through COM without problems
just using the setting "Register for COM interop" and "Make assembly COM visible" (and using the attribute [ClassInterface(ClassInterfaceType.AutoDual)] to make methods available at VB6.
After that I tried to translate the sample to C++/CLI without success. I've created the same class with the [ClassInterface(ClassInterfaceType.AutoDual)] attribute. I've set the "Embedded IDL" setting to specify the output TLB but the TLB is not generated automatically. If I use the tlbexp util over the generated DLL I get a tlb that can be imported at VB6 but when I try to create an instance I get an "ActiveX compoennt can't create object (429)"
What more do I need to do with the project to let it run?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
没什么可说的,但你从未提到注册程序集。 C++ IDE 没有“注册 COM 互操作”选项。从 Visual Studio 命令提示符中,在程序集上运行 Regasm.exe 以将其注册。如果您不将程序集放入 GAC 中,则需要 /codebase 选项。 /tlb 选项生成类型库,从而不需要 tlbexp.exe。
Not much to go on but you never mentioned registering the assembly. The C++ IDE doesn't have the "Register for COM interop" option. From the Visual Studio Command Prompt, run Regasm.exe on the assembly to get it registered. You need the /codebase option if you don't put the assembly in the GAC. And the /tlb option generates the type library, making tlbexp.exe unnecessary.