将字符串数组传递给COM对象

时间:2013-02-21 11:00:30

标签: arrays vb.net com bstr

我放弃了找到适合以下方法的数据类型:

  1. 我有COM对象方法,需要“BSTR字符串的向量”(如COM文档所述)。
  2. 它完美地起作用: a)python(一切都可以从python BTW开始)

    Visum.Net.Zones.GetmultipleAttributes(["No","Name","XCoord","YCoord","Name","SHAREPRTORIG","SHAREPRTDEST"])
    

    b)VBS:

    Visum.Net.Zones.GetmultipleAttributes(Array("No","Name","XCoord","YCoord","Name","SHAREPRTORIG","SHAREPRTDEST"))
    

    c)但没有什么可以用VB('CComBaseContainer :: GetMultipleAttributes failed'错误被引发)

    它尝试使用以下数据类型的方法Out=Visum.Net.Zones.GetmultipleAttributes(In),每次都出现相同的错误:

    Dim Out As Object
    Dim In As New List(Of String)
    Dim In(2) As String
    In.toArray()
    

    我如何满足这种方法?

    PS。从文档引用:

      

    GetMultipleAttributes([in] VARIANT AttrIDs,[out,retval] VARIANT   *值)
      返回容器的所有网络对象的多个属性的值。必须将属性ID指定为向量   BSTR字符串。返回值包含VARIANT值的矩阵   由所有对象和指定属性的值组成。该   矩阵的行对应于标准顺序的网络对象   (按他们的钥匙排序)。列对应于中的属性   指定的订单。参数[in] VARIANT AttrIDs Vectorof   ATTRIBUTE.XLS中的属性ID。 [out,retval] VARIANT *值   所有网络对象的这些属性值的矩阵   容器

    提前致谢 I2

2 个答案:

答案 0 :(得分:0)

如果在VBS中有效:

Visum.Net.Zones.GetmultipleAttributes(Array("No","Name","XCoord","YCoord","Name","SHAREPRTORIG","SHAREPRTDEST"))

这应该在VB.NET中起作用:

Dim a() As String= New String() {"No", "Name", "XCoord","YCoord","Name","SHAREPRTORIG","SHAREPRTDEST"}

Visum.Net.Zones.GetmultipleAttributes(a) 'you might need a() instead

请查看此问题以澄清:Equivalent of Array() in VB.NET?

答案 1 :(得分:0)

以下最终有效,但不要问我为什么:

    Dim In() As Object = {"No","Name","XCoord","YCoord","Name","SHAREPRTORIG","SHAREPRTDEST"}
    Dim VisumOut(,) As Object
    VisumOut = Visum.Net.Zones.GetMultipleAttributes(In)

经过数百万次尝试后,它终于顺利进行了。如果你知道为什么,请给我们正确的答案。

Powodzenia,Rafał!