我有一个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")
类模块的“实例化”设置为“多用途”,而“持久化”设置为“非持久化”。
我在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起作用名称和类名称(我还没有测试过仅更改一个或另一个)。这是否表明我在注册表中有问题?