首先,我正在处理一个遗留的 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\”中。
我还需要做什么?我会错过什么?
任何帮助将不胜感激。