[英]Return array of objects from VB6 to C# using Interop
我需要使用互操作將一組初始化對象從 VB6 返回到 C# 中。 我的 VB function 看起來像
Public Function CreateMyObjArray(ByVal MaxCount As Integer) As MyObj()
Dim i As Integer
Dim temparray() As MyObj
ReDim temparray(MaxCount) As MyObj
For i = 0 To MaxCount
Set temparray(i) = New MyObj
Next i
CreateMyObjArray = temparray
End Function
現在,當我在傳入數組后從 C# 調用它時
Array InData = m_MyObjGenerator.CreateMyOjbArray(5);
我收到消息所在的 system.argumentexceptionerror
"引發了 'System.ArgumentException' 類型的異常。\r\n參數名稱: typeName@0"
如果我的 function 沒有參數,我也會收到此錯誤。 function 在 VB 中從一個表單工作。 同樣,下面的 function 返回一個 MyObj 就好了
Public Function CreateMyObj() As MyObj
Set CreateMyObj = New MyObj
End Function
我知道我可以在 C# 版本中列出新的 MyObj 列表,然后使用.ToArray() 它,但我真的很想讓它工作。 謝謝。
解決方案找到了如何做到這一點。 我必須使用沒有 /sysarray 標志的 tlbimp.exe(VS 必須在內部使用)。 在那之后,我能夠讓一切正常工作。 謝謝你們的幫助。
很抱歉,我無法嘗試一些代碼來真正幫助您解決這個問題。
話雖如此,將InData
設置為Object
。
Object InData = m_MyObjGenerator.CreateMyOjbArray(5);
該語句執行后,使用手表 window 來確定InData
的類型。 修改代碼(將Object
InData
為您使用監視窗口發現的類型)。
希望有幫助。
首先讓我們清理一下VB:
Public Function CreateMyObjArray(ByVal MaxCount As Integer) As MyObj()
''// MaxCount = 5 would allocate 6 array items with your old code
''// Also: do this in one line rather than with an expensive "ReDim"
Dim temparray(MaxCount-1) As MyObj
Dim i As Integer
For i = 0 To MaxCount -1
Set temparray(i) = New MyObj
Next i
CreateMyObjArray = temparray
End Function
最后,您的 C# 應該如下所示:
MyObj[] InData = m_MyObjGenerator.CreateMyObjArray(5);
MyObj 是與您的 vb 代碼交談時使用的編組類型。 正如另一張海報所建議的那樣,您可以將其設置為Object
並逐步執行,讓 Visual Studio 告訴您確切使用的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.