2010-11-17 94 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