来自VB6的DotNet COM,没有强名称

时间:2019-04-17 16:05:36

标签: c# .net com vb6

我有一个未签名的第三方程序集周围的C#适配器程序集,因此我也无法对我的程序集进行签名。 VB6程序将使用我的适配器程序集访问第三方程序集(不是COM)中的功能。 但是,虽然我可以使用regasm注册程序集,并生成tlb文件并在VB6中引用它,但是当我尝试将Dimmed变量设置为Adapter的新实例时,却收到了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,但什么也看不到。 有什么办法可以确定问题出在哪里?

1 个答案:

答案 0 :(得分:2)

@Renat在原始帖子的评论中称呼它

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

我正在使用64位OS(Windows 2012 R2)在目标计算机上运行VB6,但它仍将编译为x86程序集。

所以我想这课是VB6的x86,但是我想大家都知道:S