首页 > 解决方案 > VBA CreateObject 与类型库引用

问题描述

我已经通过 ATL 构建了一个 COM 对象,以便在 VBA 中使用已编译的 C++。我的类型库是(比如说)“MyObjLib”,对象是“MyObj”。

如果我在 VBA 中使用对象浏览器,一切看起来都不错:它向我显示库为 MyObjLib,并且在其中我看到一个类 MyObj 作为库的成员。

如果在 VBA 中,我通过 References 菜单包含这个库,我可以这样写:

Dim obj as MyObj
Set obj = new MyObj

一切正常。但是,如果我尝试:

Dim obj as Object
Set obj = CreateObject("MyObjLib.MyObj")

它因“运行时错误 429:ActiveX 组件无法创建对象”而失败。

这很不幸,因为我现在想使用 Python 中的 COM 对象。有什么我想念的想法吗?

标签: vbacomatllate-binding

解决方案


感谢您的评论。我花了一些时间在我的 C++ 代码中搜索 ProgId。然后我偶然发现了另一个 SO 答案,关于有人在 ATL 简单 COM 对象向导中将 ProgId 字段留空......这正是我所做的!因此,我从未为该课程注册 ProgId(因此在注册表中没有任何 HKCR 条目)。

我使用向导创建了另一个项目,这次输入 ProgID 并将新项目中 .rgs 文件中的语法复制到我现有的文件中。

嘿 presto, CreateObject() 现在可以正常工作了。


推荐阅读