【问题标题】:Calling a COM Interop .Net assembly from Visual Basic 6.0从 Visual Basic 6.0 调用 COM Interop .Net 程序集
【发布时间】:2017-06-01 07:31:55
【问题描述】:

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

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

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

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

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

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

我们如何应对这种情况?

作为细节,我们有一些简单的东西:

  • MyApplication.exe (vb6)
  • MyWrappers.dll(和 .tlb)(为 COM 互操作标记的 .net C# 程序集并引用 UWP SDK 以便能够启动通知)

再一次,“安装”没有崩溃。仅调用 COM 互操作程序集以启动 toast 通知。

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

有什么想法吗? :)

塞巴斯蒂安

【问题讨论】:

    标签: uwp desktop-bridge


    【解决方案1】:

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

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

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

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

    我已经发布了一篇关于后者的示例/博客文章: https://blogs.windows.com/buildingapps/2017/02/01/adding-uwp-features-existing-pc-software/

    【讨论】:

    • 感谢您的快速回答!顺便说一句:- 1:不确定我们是否可以“链接”两个安装程序:一个来自 Visual Studio 6 安装程序,一个来自 Visual Studio 2017 安装程序。你有这样做的样本吗? - 2:这个解决方案似乎完成了:如何在 registry.dat 文件中添加一些东西?那么,当 appx 安装时,我可以添加一些自定义操作来与这个 registry.dat 交互吗?你有样品吗? - 3:是否可以从 VB6 到 C# 汇编? (您的示例是从 VB6 到 C++)您有任何示例吗? :) 谢谢!
    • 选项 1 相当简单,并且是适合您情况的最佳路径:您可以只创建一个包含两行的 .bat 文件 - 第一行调用您现有的安装程序,第二行注册 COM 组件。然后将 DAC 指向 .bat(而不是将其指向您的安装程序)。顺便说一句,关于选项 2:您可以将 registry.dat 文件加载到 regedit.exe 中以查看和编辑其内容。
    • Thx,我们最终决定将安装过程迁移到 Visual Studio 2017 Installer。顺便说一句,如果您有选项 3 的指针,我仍然感兴趣!
    • 如果你想在这里使用 C#,使用 COM 互操作是你最好的选择。但是,如果您的 C# 程序集实际上只是用于调用 UWP API 的薄层,那么像我的示例中那样采用 C++ 路线会更轻量/直接 (imo)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2012-02-26
    相关资源
    最近更新 更多