2

首先,我正在处理一个遗留的 VB6 应用程序,它通过调用一个(非 ActiveX)C++ DLL 来创建“作业”,该 DLL 启动(通过调用 CLSIDFromProgID 指向类,然后通过 CoCreateInstance 启动)各种 C++/VB6 ActiveX exe (这些工作是各种类型的数据下载器)。我不得不编写一个新的下载器,并且由于 ActiveX 是(非常)遗留的,我在 VB.NET 中将它作为 COM 类库编写(因为 VB6 也不能很好地处理基于流的 HTTP,如果有的话)与与其他下载器相同的入口点。

那么我发现的第一件事是我显然不能直接调用 COM 库(当启动器调用 CoCreateInstance 时,它​​会在调用后的下一条语句恢复之前触发析构函数)所以我必须编写一个 VB6 ActiveX exe 作为代理实例化 COM (Set oMyObject = CreateObject("DownloaderLib.Loader")),然后执行一个 'DoEvents' 循环。从作业处理程序调用没有任何问题,在我的开发环境中,一切都可以协同工作并且执行得很好。

但是,当我将所有部件移到我的系统测试环境时,它就会崩溃。VB6 应用程序调用代理,但代理似乎没有加载(或至少执行)COM。我知道我正在启动代理,因为我有向事件服务器“显示”某些内容的代码;我知道它没有到达 COM,因为我在 COM 中有类似的代码,应该在它内部的各个点发送消息。

已经注册了 ActiveX exe 代理,并且我已经注册了(使用“正确的”REGASM)COM 库。我的开发环境是Win10,使用VS2017和.NET Framework v4.7.03190;COM 构建为面向 .NET Framework 4.6.1 的类库。我的系统测试环境是 Windows Server 16,安装的 .NET Framework 是 4.7.2(版本编码 461814),我使用的 REGASM 位于文件夹“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\”中。

我还需要做什么?我会错过什么?

任何帮助将不胜感激。

4

1 回答 1

0

@TnTinMn 这就是问题所在。我在“C:\Windows\Microsoft.NET\Framework\v4.0.30319\”(不是 Framework64)下重新注册了 REGASM,它现在可以工作了!

非常感谢。

于 2020-02-05T15:07:26.770 回答