[英]how to do array of struct in c# like an type in vb6 using marshal
[英]How do I marshal a C# string array to a VB6 array?
我有一個使用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代碼的第四行失敗,並顯示錯誤“編譯錯誤:無法分配給數組”
strArr()變量實際上不是字符串數組。 它是一系列變體。 固定:
Dim strArr() As String
strArr = test.OneTwoThree
現在,它與您的第一個片段相同。
如果您正在尋找C#語法來創建數組,則使用長度為5的數組的new string[5]
,以空值初始化,或者使用具有指定值的數組的new string[] { "one", "two" }
。
除此之外,您還必須更具體地說明“不起作用”對我們的幫助。
我的猜測是test.OneTwoThree返回單個字符串而不是字符串數組。 嘗試使用Dim strArr
而不是Dim strArr()
如果Dim strArr()
,則必須找出C#函數的代理返回的分隔符是什么(有時不需要封送數組就可以在客戶端代碼環境中獲得正確/預期的終止)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.