繁体   English   中英

如何将对象集合从VB6传递到.NET?

[英]How can I pass a collection of objects from VB6 to .NET?

我需要将一组键/值对从VB6传递到.NET。 在VB6代码中,它们存在于本机集合中。 但是我不确定在.NET项目中可以引用什么,以便能够在我的一种方法中接受Collection类型的参数。

我尝试添加对Visual Basic for Applications的引用,但返回“无法添加对'Visual Basic For Applications”的引用。

我会以错误的方式处理吗?

您可以在c#中使用如下代码:

[Guid("fb5e929a-2f8b-481e-9516-97edf5099df4")]
[ComVisible(true)]
public interface myInterface{
public void addObject(string key, string value);
}

在课堂上,您可以这样:

private collection
public addObject(string key, string value)
{
collection.Add(key, value);
}

这应该允许您在vb6中调用addObject并传递数据。 然后,.net会将其添加到集合中,因此您无需将整个集合从vb6传递到.net,而是将它们逐个传递。

您可以在此处阅读有关GUID的更多信息

有关COM的更多信息,请参见vb6和c#之间的示例代码

与使用COM相比 ,我发现将数据序列化为JSON并通过Interop鸿沟以纯文本形式发送数据变得更加简单。 一开始我拒绝了它,但是现在这是我的首选解决方案。 如果“正确”的解决方案令人沮丧,请尝试一下。

尝试通过在Visual Basic 6.0中创建一个HashTable将其传递给.NET

Set dictionary = Server.CreateObject("System.Collections.HashTable")
With dictionary
    For i = 1 To 100
        .Add Chr(i), "some text value"
    Next
End With

然后在C#或VB.NET COM公开类中

public string LoadHashTable(Object tDict)
{
   return String.Format("Type : \"{0}\", Count : {1}", ((Hashtable)tDict).GetType().ToString(), ((Hashtable)tDict).Count);
}

COM公开类的一个示例在Stack Overflow问题中,使用4.0框架和Visual Studio 2010为ASP Classic构建COM互操作库

请记住在x86和x64中都注册它:

%windir%\Microsoft.NET\Framework\v4.0.30319\regasm MyThing.dll /tlb:MyThing.tlb /codebase MyThing

%windir%\Microsoft.NET\Framework64\v4.0.30319\regasm MyThing.dll /tlb:MyThing.tlb /codebase MyThing

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM