C# 不带强名称的VB6中的DotNet COM
我在未签名的第三方程序集周围有一个c#适配器程序集,因此我也无法对程序集进行签名。我的适配器程序集将被VB6程序用来访问第三方程序集(不是COM)中的功能。 但是,虽然我可以使用regasm注册程序集,生成tlb文件,并在VB6中引用它,但当我尝试将变暗的变量设置为适配器的新实例时,会出现ActiveX异常 我安装了相应的.Net Framework,可以通过安装VB6的计算机上的另一个.Net可执行文件从命令行运行适配器程序集 下面是我如何设置我的COM,无第三方参考..以防万一这是一个问题C# 不带强名称的VB6中的DotNet COM,c#,.net,com,vb6,C#,.net,Com,Vb6,我在未签名的第三方程序集周围有一个c#适配器程序集,因此我也无法对程序集进行签名。我的适配器程序集将被VB6程序用来访问第三方程序集(不是COM)中的功能。 但是,虽然我可以使用regasm注册程序集,生成tlb文件,并在VB6中引用它,但当我尝试将变暗的变量设置为适配器的新实例时,会出现ActiveX异常 我安装了相应的.Net Framework,可以通过安装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;
}
}
从VB6访问支持.NET COM的适配器程序集时,如何找到问题的根源?我看过procmon,但什么也看不见。
有没有办法确定问题出在哪里?@Renat在原始帖子的评论中称之为 在VS2019中重新编译为显式32位,并交换为在目标计算机上使用位于C:\Windows\Microsoft.Net\Framework\regasm.exe的x86 regasm 我使用64位操作系统(windows 2012 r2)在目标机器上运行VB6,但它仍将编译为x86程序集
因此,我想课程是针对VB6的x86,但我想你们都知道:c#dll和VB6代码是否具有相同的位?例如,32位代码不能使用64位COM对象在VB6中收到的错误是什么?AFAIK强命名对VB6 COM互操作没有任何影响。至少我做了很多COM互操作(VB6调用C#)并且没有签署任何东西。你能发布VB6代码,并明确指出哪一行给了你什么错误吗?IIRC,如果你想将COM互操作程序集安装到GAC中,那么它需要强名称。但是如果您只是重新注册它,您应该能够实例化它。运行IDE时,可能需要将程序集的副本与vb6.exe(通常是C:\Program Files\Microsoft Visual Studio\VB98)放在同一文件夹中。
[ComVisible(true)]
[Guid("C729E6FF-C2F5-4C9B-8200-A135E15576A6")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface _MySimpleComClass
{
[DispId(1)]
int Add(int num1, int num2);
}