从VB6 DLL转换为VB6 ActiveX EXE后实例化类时出错

时间:2018-09-23 01:45:11

标签: excel-vba vb6 activex excel-2016 activex-exe

我有一个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起作用名称和类名称(我还没有测试过仅更改一个或另一个)。这是否表明我在注册表中有问题?

0 个答案:

没有答案