2010-11-17 92 views
2

我有一个使用C#COM DLL的VB6应用程序。在托管C++我可以写出如下功能:如何编组一个C#字符串数组到VB6数组?

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代码的错误“编译错误:无法分配给阵列”

回答

7

strArr()变量实际上并不是一个字符串数组。它是一系列变体。修复:

Dim strArr() As String 
strArr = test.OneTwoThree 

现在它与您的第一个片段相同。

+0

谢谢。现在工作!我认为在VB中“Dim a,b,c As String”与C#“string a,b,c;”是一样的没有意识到你必须明确地指定每个类型。 – 2010-11-17 16:44:17

0

如果您正在寻找C#语法来创建数组,那么对于长度为5的数组,其值为new string[5],对于具有指定值的数组,使用空值或​​进行初始化。

除此之外,您必须更具体地了解什么“不起作用”,以帮助我们。

0

我的猜测是test.OneTwoThree返回一个单独的字符串,而不是一个字符串数组。 尝试Dim strArr代替Dim strArr() 如果成功,你必须找出哪些是对C#功能 代理返回的分隔符(有时编组阵列的并不一定得到客户 代码enviournment正确/预期终止)

+0

OneTwoThree会返回一个字符串数组。我测试了它。 – 2010-11-17 16:46:13