我有一些VB6代碼不能輕易修改,看起來像這樣:VB6變型到.NET類型
Dim cCount as Long
Dim rCount as Long
Dim result()
Set mx = CreateObject("Component.Class")
Dim rtn = mx.GetList(rCount,cCount,result)
它會調用該方法是目前我們已經遷移到VB6組件。 NET有一個問題。我們不確定結果()是什麼類型,因爲它是變體類型。我們已經嘗試過對象,對象[],對象[] [],字符串,字符串[]等,其中沒有任何工作。
下面是一個例子:
public bool GetList(ref long rCount, ref long cCount, ref object result)
{
...
}
我甚至試過設置第三個參數去VariantWrapper因爲它會根據需要添加的ByRef:
public bool GetList(ref long rCount, ref long cCount, VariantWrapper result)
{
...
}
任何想法我可以設置進入的結果爲了讓我沒有未處理的異常?
我已經創建了一個測試接口(用於COM),測試類和測試VB6應用程序,以確保它是變體的問題。所以,它的定義如下所示:
.NET接口:
[DispId(1)]
[ComVisible(true)]
string Test(ref object[] value);
VB 6方法:
Private Sub Command1_Click()
Set mx = CreateObject("Component.Class")
Dim result()
MsgBox mx.Test(result)
End Sub
相同的問題,如上所述。在VB6中,它只是拋出我。如果我編譯並運行它,我會得到一個通用的.NET異常,並將它拋出。
您可以看到'result()'是如何聲明並通過的,但不知道'GetList'返回後如何使用它? – Jay 2010-07-13 19:22:44
因此,當Variant()類型被分配給結果並傳入GetList時,.NET會彈出一個錯誤提示。 – 2010-07-13 19:31:00
添加VariantWrapper會給我一個錯誤5非法過程調用。 – 2010-07-13 19:58:14