从 Visual Basic 6.0 调用 COM Interop .Net 程序集

Calling a COM Interop .Net assembly from Visual Basic 6.0

我们在 Visual Basic 6.0 上有一个项目 运行 我们尝试在 Desktop Bridge 中迁移。 当我们使用 DAC 命令提示符时,一切正常。 转换后的应用程序,按原样转换,在任何测试计算机上都运行良好。

我们甚至设法添加了一个 COM Interop .NET 程序集,以便能够使用 UWP 功能(如 toasts)

在任何开发机器上一切正常,但在测试机器上却不行。 好吧,从 Visual basic 加载 COM Interop .Net Assembly 似乎不起作用。

测试机和开发机的主要区别:

  1. 在开发机器上,Visual Studio 2017 正在将 dll 注册为 COM 互操作(使用 regasm,在后台)
  2. 在测试机上,我们先制作一个.msi安装文件(with Visual Studio 6 Installer,是的旧的一种 interdev 样式 IDE ;),然后我们将 DAC 命令行应用于这个新的 .msi

所以,看来我们必须在目标测试机器上手动注册这个程序集,使用 regasm ... 因为 Visual Studio 6 Installer 不知道如何注册互操作程序集(使用 regasm

我们如何应对这种情况?

作为细节,我们有一些直截了当的东西:

再一次,"installation" 没有崩溃。仅调用 COM Interop 程序集以启动 toast 通知。

实际上,如果 DAC 没有为 COM 互操作打包这个程序集,这个错误似乎很明显,而且它是有道理的。

有什么想法吗? :)

塞巴斯蒂安

是的,您必须将 COM 注册作为包部署的一部分。

一种方法是将 COM 注册添加到您现有的安装程序(或链接两个安装程序),然后再次 运行 DAC。

另一种选择是 "manually" 将 COM 注册添加到您已有的 DAC 输出中(即添加到 registry.dat 文件)。

第三种选择是根本不使用 COM,而是使用纯 Win32 互操作从 VB6 应用调用 UWP API。

我已经发布了一个 sample/blog post 来做后者: https://blogs.windows.com/buildingapps/2017/02/01/adding-uwp-features-existing-pc-software/