来自VB6的DotNet COM没有强名称

问题描述 投票:2回答:1

我有一个围绕未签名的第三方程序集的c#Adapter程序集,所以我也无法签署我的程序集。我的适配器组件将由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# .net com vb6
1个回答
2
投票

@Renat在原帖子的评论中称之为。

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

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

所以我猜这个教训是VB6的x86,但我认为你们都知道:无论如何:S

© www.soinside.com 2019 - 2024. All rights reserved.