Когда JavaScript вызывает COM для передачи массива, интерфейс COM получает объект типа VARIANT, например массив. Тип vt этого объекта — VT_DISPATCH, поэтому его значение представляет указатель типа IDispatch.
Указатель типа IDispatch указывает, что объект массива на самом деле является встроенным объектом массива JavaScript. На стороне JavaScript мы можем получить размер массива через атрибут длины. Затем мы можем получить массив через GetIDsOfNames. и длину функции Invoke, чтобы содержимое массива могло быть динамически переменным.
Ниже приводится цитируемое содержание: // Получаем длину массива } |
В это время nLength получает длину массива.
Массив в JavaScript — это объект, а содержимое массива — это атрибуты объекта, которые создаются динамически. Метод запроса этих атрибутов чем-то похож на метод запроса длины. Они также являются функциями GetIDsOfNames и Invoke. Основное отличие заключается в разнице в именах. Имя атрибута объекта-элемента в массиве создается динамически, то есть его можно получить путем индексации. Поэтому здесь имя атрибута также можно получить путем индексации. следует:
Ниже приводится цитируемое содержание: for ( int i = 0 ; i < nLength; ++ i) |
Таким образом, вызывая эти два метода атрибутов, все объекты массива JavaScript могут быть упрощены в COM-интерфейсе.
Каковы преимущества этого? Просматривая множество онлайн-ресурсов, я обнаружил, что большинство из них используют SAFEARRAY для обработки структуры и передачи ее в COM-интерфейс. Однако SAFEARRAY не поддерживается в MIDL, как и сам объект JavaScript. Для этого контента для работы в режиме SAFEARRAY необходимо переключаться между VBScript и JavaScript, что вызовет трудности при написании программы и путаницу для обслуживающего персонала.
Непосредственно используйте JavaScript для передачи массива и его интеграцию любым способом. Нет необходимости интегрировать структуру с помощью метода SAFEARRAY. В то же время, поскольку каждый объект (элемент) в JavaScript имеет свою собственную информацию о типе, массивы в JavaScript являются лучшей альтернативой (методом передачи) структурам в C.