【发布时间】: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)。