我有一个 VB6 DLL,多年来和许多版本都可以正常工作。它从 Excel 加载项中使用。
为了使其与 64 位 Excel 兼容,我想将其转换为 VB6 ActiveX EXE。我这样做了,但是现在当我尝试从客户端(相同版本的 Excel;2016)实例化它时,出现错误。这是客户端返回的错误:
Automation error
The specified module could not be found.
我的理解是ActiveX EXE在编译的时候应该已经自动注册了,但是我也试过双击运行注册,也可以手动注册到regserver。但我仍然得到同样的错误。
在客户端,这是我用来实例化 VB6 ActiveX EXE 的行;这与它是 VB6 DLL 时成功实例化它的方式完全相同:
Dim abc As Object
Set abc = CreateObject("ABC.cls_abc")
类模块的 Instancing 设置为 MultiUse,Persistable 设置为 NotPersistable。
我在 regedit 中搜索了 ABC.exe,它就在那里。
有什么建议么?
更新:
我尝试更改 ActiveX EXE 的项目名称和类名称,它工作。
我将项目名称从 ABC 更改为 ABC64,并将类名从 cls_abc 更改为 cls_abc64。
然后从 Excel 我实例化它是这样的:
设置 abc = CreateObject("ABC64.cls_abc64")
我尝试将其改回 ABC 和 cls_abc,并将其改回 ActiveX DLL。我已经删除了DLL,所以我再次编译它。然后我尝试使用 Set abc = CreateObject("ABC.cls_abc") 从 Excel 实例化它,效果很好。
因此,如果我更改项目名称和类名称,该项目将作为 ActiveX EXE 工作,并且它作为具有旧项目名称和类名称的 ActiveX DLL 工作,但不能作为具有旧项目名称和类的 ActiveX EXE 工作名称(我没有测试过只改变一个或另一个)。这是否表明我在注册表中有问题?