Передать массив строк в COM-объект

Я дал с поиском типа данных, который будет соответствовать следующему методу:

  1. У меня есть метод объекта COM, который требует "вектор строк BSTR" (как сказано в документации COM).

Он отлично работает с: а) Python (все работает с Python BTW)

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

б) VBS:

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

в) но ничего не может быть с 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 * значение)
Возвращает значения нескольких атрибутов для всех сетевых объектов контейнера. Идентификатор атрибута должен быть указан как вектор строк BSTR. Возвращаемое значение содержит матрицу значений VARIANT, состоящую из значений всех объектов и указанных атрибутов. Строки матрицы соответствуют сетевым объектам в стандартном порядке (упорядочены по их ключам). Столбцы соответствуют атрибутам в указанном порядке. Параметры [in] VARIANT AttrIDs Идентификаторы атрибутов Vectorof, как в ATTRIBUTE.XLS. [out, retval] VARIANT *value Матрица значений этих атрибутов для всех сетевых объектов в контейнере

Заранее спасибо i2

2 ответа

Решение

Следующее, наконец, сработало, но не спрашивайте меня, почему:

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

После миллиона попыток все прошло нормально. Если вы знаете, почему это так, пожалуйста, дайте нам правильный ответ.

Powodzenia, Rafał!

Если это работает в 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

Посмотрите на этот вопрос для уточнения: Эквивалент Array() в VB.NET?

Другие вопросы по тегам