Передать массив строк в COM-объект
Я дал с поиском типа данных, который будет соответствовать следующему методу:
- У меня есть метод объекта 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?