我需要将字符串的键/值对集合从 VB6 传递到 .NET。在 VB6 代码中,它们存在于本机集合中。但是我不确定我可以在我的 .NET 项目中引用什么以便能够在我的一种方法中接受 Collection 类型的参数。
我尝试添加对 Visual Basic for Applications 的引用,但返回“无法添加对‘Visual Basic For Applications’的引用”。
我是不是走错了路?
我需要将字符串的键/值对集合从 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 中制作 a将其传递给.NET :HashTable
Set dictionary = Server.CreateObject("System.Collections.HashTable")
With dictionary
For i = 1 To 100
.Add Chr(i), "some text value"
Next
End With
public string LoadHashTable(Object tDict)
{
return String.Format("Type : \"{0}\", Count : {1}", ((Hashtable)tDict).GetType().ToString(), ((Hashtable)tDict).Count);
}
COM 公开类的一个示例是 Stack Overflow 问题Building a COM interop library for ASP Classic using 4.0 framework and Visual Studio 2010
记得在 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