【问题标题】:DotNet COM from VB6 without a strong name来自 VB6 的 DotNet COM 没有强名称
【发布时间】:2019-09-07 22:52:26
【问题描述】:

我有一个围绕未签名第三方程序集的 c# 适配器程序集,因此我也无法签署我的程序集。 VB6 程序将使用我的适配器程序集来访问第三方程序集(不是 COM)中的功能。 但是,虽然我可以使用 regasm 注册程序集,并生成一个 tlb 文件,并在 VB6 中引用它,但当我尝试将我的 Dimmed 变量设置为我的适配器的新实例时,我得到了一个 ActiveX 异常。

我已经安装了相应的 .Net 框架,并且可以通过安装 VB6 的机器上的另一个 .Net 可执行文件从命令行运行我的适配器程序集。

这是我设置 COM 的方式,没有第三方参考..以防万一这是问题..

    [ComVisible(true)]
    [Guid("F728D70E-ED98-456C-B8C6-4EA5B0EF8A1A")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("SimpleComClass452.MySimpleComClass")]
    public class MySimpleComClass : _MySimpleComClass
    {

        public int Add(int num1, int num2)
        {
            return num1 + num2;
        }
    }
    [ComVisible(true)]
    [Guid("C729E6FF-C2F5-4C9B-8200-A135E15576A6")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface _MySimpleComClass
    {
        [DispId(1)]
        int Add(int num1, int num2);
    }

如何从 VB6 访问我的 .NET COM 感知适配器程序集的问题的根源?我看过procmon,但什么也看不到。 有什么方法可以确定问题出在哪里?

【问题讨论】:

  • c# dll 和vb6 代码的bittness 一样吗?例如。 32 位代码不能使用 64 位 COM 对象
  • 您在 VB6 中收到的错误是什么?
  • AFAIK 强命名对 VB6 COM 互操作完全没有影响。至少我做了很多 COM 互操作(VB6 调用 C#)并且不签署任何东西。
  • 能否贴出VB6代码,具体指出哪一行给你什么错误?
  • IIRC,如果你想将你的 COM 互操作程序集安装到 GAC 中,那么它需要强命名。但是如果你只是 regasm 注册它,你应该能够实例化它。运行 IDE 时,您可能需要将程序集的副本放在与 vb6.exe 相同的文件夹中(通常为 C:\Program Files\Microsoft Visual Studio\VB98)。

标签: c# .net com vb6


【解决方案1】:

@Renat 在原帖的 cmets 中称它为

在 VS2019 中重新编译为显式 32 位,并在目标计算机上的 C:\Windows\Microsoft.Net\Framework\regasm.exe 处交换为使用 x86 regasm。

我使用 64 位操作系统(windows 2012 r2)在目标机器上运行 VB6,但它仍会编译为 x86 程序集。

所以我想这节课是 VB6 的 x86,但我想你们都知道这一点:S

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多