将VB6对象传递给C#

3

我试图通过Interop将VB6对象传递给我的C#代码。

VB6能够访问C#代码,但尝试读取对象时,其中没有任何属性。有人可以指出我错在哪里吗?

[VB6]

Set CSharp = CreateObject("CSharp.School")    
Dim p As School.Student
Set p = New School.Student
p.Name = "Bruce Willis"
p.id = 1
    
Call CSharp.Register(p)

[C#]
[Guid("1e54b90a-8909-41f5-abcd-87406c261f90")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface ISchool
{
    Register(object student)
}

Guid("c2d41a00-d000-49e7-abcd-236c6cb9d862")]
[ClassInterface(ClassInterfaceType.None), ProgId("CSharp.School")]
[ComVisible(true)]
public class School : ISchool
{
    public void Register(object student)
    {
        Type myType = student.GetType();
        IList<PropertyInfo> props = new List<PropertyInfo>(student.GetProperties());
        //no property found in the object argument
        Console.WriteLine("Count : " + props.Count.ToString());
    }
}

1
你知道VB6是在1998年发布的,而且在2008年4月已经停止支持了吗?虽然运行时似乎永远存在,但我怀疑VB6测试用例在十多年前就过时了。如果我是你,我会将其与.NET Framework 3.51一起运行(我认为仍然得到支持),但这是一个可以追溯到2005-2008年的时间范围内的东西。 - Flydog57
1
@Flydog57,仍有大量VB6代码需要维护。将其中的部分迁移到.NET和/或在.NET中添加新功能是一种常见的升级路径,而不是一次性全部转换。目前,我正在使用.NET 4.8进行此项目的工作,没有任何问题。 - StayOnTarget
这个回答解决了你的问题吗?在VBA中自定义COM类中使用IntelliSense - StayOnTarget
1个回答

0

我曾经遇到过同样的问题,我认为你现在尝试的方法会很困难。

在我的情况下,解决方案是在VB6中创建一个方法将对象转换为JSON并将其作为字符串传递给该方法。这样,在C#中就可以轻松检索所需的数据。

在你的例子中,它看起来会像这样:

 {"School":{
  "Student":{
     "Name":"Bruce Willis",
     "id":1
  }   }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接