Sim*_*ods 5 vb6 com com-interop
我有一个旧的 VB6 程序,已经好几个月没有使用了。该程序引用了大量 C# 程序集 (.NetFramework 4.8)。将程序作为二进制文件运行,一切正常。
我已经打开 VB6 ide 来单步执行一些代码,但现在遇到自动化错误“系统找不到指定的文件”。(错误 80070002)尝试实例化 COM Interop 类之一时。这以前没有发生过。
Private Sub InitMessageStore()
Dim l_oBusFactory As IfxBusService.BusFactory <= COM Interop reference
Set l_oBusFactory = New IfxBusService.BusFactory <= ERROR here
l_oBusFactory.InitialiseMessageStore GetConnection(m_oIfxsys.Dbase.Database.Definition)
End Sub
Run Code Online (Sandbox Code Playgroud)
COM Interop 决定
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IBusFactory))]
[Guid("200C6C26-6881-4CB5-A8E7-E0E5532D6D5F")]
public class BusFactory : IBusFactory
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("5531BD20-2C7B-452B-A7D7-2D05E39EB83E")]
public interface IBusFactory
Run Code Online (Sandbox Code Playgroud)
我已经重新检查了上述注册表注册...最重要的是
并且该文件位于注册表中指定的文件夹位置。
我使用的是 Win10 版本 10.0.19044 Build 19044。我以管理员身份运行所有内容。我仅将 DEP 切换到基本的 Windows 程序和服务。
正如我上面所说,当作为二进制文件运行时,一切都工作正常,但是,对我来说,操作系统似乎正在阻止 VB6 ide 加载 COM Interop 程序集。
关于如何单步执行(但不一定进入)我的 COM 互操作代码再次工作的任何建议。
最后,我错过了 InprocServer32 下有 2 个条目,其中一个指向正确的文件(1.0.0.0),但另一个(5.80.0.111 - 实际上是我们的 com 二进制文件的版本号)没有不是指向 file:///,而是指向纯 .net 程序集。一旦我删除了不正确的一个,一切就开始正常了。
仍然不知道错误是从哪里来的!