2011-11-22 49 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'),因为你希望数组的大小相同。但是这也不起作用。 –