2011-11-22 107 views
2

我需要調用一個函數,它將一組驅動器號作爲其參數之一。我從創建對象的開發團隊接收到的示例使用VBScript和看起來像這樣:使用VB.NET調用COM接口

Array("C:","D:") 

這並不在VB.NET工作,所以我嘗試了下面的代碼。注:驅動器被傳遞給我一個逗號分隔字符串:

Dim drives As String = "C,D" 
Dim volumeList As String() = drives.Split(","c) 
For i As Integer = 0 To volumeList.Length - 1 
    volumeList(i) &= ":" 
Next 

然後我嘗試volumeList傳遞給有問題的功能,我得到一個無效的參數異常。有沒有其他方法可以嘗試創建/傳遞此數組,以便它像VBScript示例一樣工作?我告訴開發者我在做什麼,他說:「呃...應該工作。」所以我想弄明白,而不必強迫這個人來幫助我。

編輯:COM服務器期望類型變體(VB6)的數組。那就是問題所在。可悲的是,我在VB.NET嘗試失敗。

+0

右鍵單擊對有問題的方法的調用,然後單擊轉到定義。將方法聲明添加到您的問題以獲取更多上下文。此外,如果可能,請查看您是否可以從本機開發人員處獲得IDL聲明,並在問題中發佈該聲明。 –

+0

@ BrentM.Spell - 我無法進入方法定義,因爲我的項目中沒有參考。我只是通過他們的開發團隊發送給我的例子。 –

+0

您可以嘗試從數組中構建一個 System.Runtime.InteropServices.VariantWrapper 實例,然後將其傳遞給COM方法。 –

回答

0

VB6變體數據類型等同於VB.Net中的對象。

Dim drives As String = "C,D" 
Dim volumeList As String() = drives.Split(","c) 
' Create an object array the same length as volumeList 
Dim objectArray(volumeList.Length - 1) As Object 
' Add the strings to the object array 
For i As Integer = 0 To volumeList.Length - 1 
    objectArray(i) = volumeList(i) & ":" 
Next 

' Now pass the object array to your function 
+0

謝謝。我仍然得到「參數不正確。」作爲一個附註,我認爲當你創建objectArray時,長度應該是'volumeList.Length'(而不是'volumeList.Length - 1'),因爲你希望數組的大小相同。但是這也不起作用。 –