我有一个使用C#COM DLL的VB6应用程序。在托管C ++中,我可以编写如下函数:
array<String^>^ GetAManagedArray()
{
//Do stuff and return a managed array
}
然后我可以将返回的托管数组分配给VB6中的数组:
Sub MySub()
Dim strArray() As String
strArray = myComObject.GetAManagedArray
End Sub
这在C ++中运行良好,但在C#中System.Array
对象是抽象的,我似乎无法找到与C ++ array<>^
相当的托管对象。另外,在C#中,只返回string[]
不起作用。
C#中的托管数组等价物是什么?
编辑:以下是我对该功能的确切代码
C#COM函数:
public string[] OneTwoThree()
{
return new string[] { "1", "2", "3" };
}
VB6功能:
Private Sub Form_Load()
Dim test As New ComObjectCSharp
Dim strArr(), strTemp As String
strArr = test.OneTwoThree
strTemp = strArr(0) & " " & strArr(1) & " " & strArr(2)
MsgBox strTemp
End Sub
代码在VB6代码的第四行失败,错误“编译错误:无法分配给数组”
答案 0 :(得分:7)
strArr()变量实际上不是字符串数组。这是一系列变种。修正:
Dim strArr() As String
strArr = test.OneTwoThree
现在它与您的第一个代码段相同。
答案 1 :(得分:0)
如果您正在寻找C#语法来创建数组,那么对于长度为5的数组,它是new string[5]
,对于具有指定值的数组,使用空值或new string[] { "one", "two" }
初始化。
除此之外,您必须更具体地了解“不起作用”,以便我们为您提供帮助。
答案 2 :(得分:0)
我的猜测是test.OneTwoThree返回单个字符串而不是字符串数组。
试试Dim strArr
而不是Dim strArr()
如果可行,您必须找出C#函数的代理的分隔符
返回(有时封送数组不需要在客户端获得正确/预期的终止
代码环境)