如何将C#字符串数组封送到VB6数组?

时间:2010-11-17 00:32:51

标签: c# com vb6 c++-cli marshalling

我有一个使用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代码的第四行失败,错误“编译错误:无法分配给数组”

3 个答案:

答案 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#函数的代理的分隔符 返回(有时封送数组不需要在客户端获得正确/预期的终止 代码环境)