Дуальные интерфейсы COM-технологии
Все статьи, все книги, которые я читал по COM-технгологии, все они упоминают, что BSTR, SafeArray, Variant - условие передачи данных, необходимое для кросс-языковой совместимости.
Но при этом _все_ они упоминают эти понятия как составную часть реализации IDispatch, как часть сервера Автоматизации.
И в итоге, если я реализую простой COM, vtbl-интерфейс, есть ли там какие-то условия на передаваемые данные? Обязан ли такой интерфейс передавать данные через BSTR, SafeArray, Variant?
А если я планирую реализовать дуальный интерфейс. Соответственно доступна будет и виртуальная таблица функций, и сервер автоматизации. Сервер автоматизации обязан использовать BSTR, SafeArray, Variant.
А какие условия накладываются на функции виртуальной таблицы функций? Обязан ли я там реализовывать BSTR, SafeArray, Variant?
Насколько я понял - не обязан. Именно для того эта таблица и выводится пользователям C++, чтобы они могли обойти использование BSTR, SafeArray, Variant.
Так ли это?
И если это так, то как рекомендуется передавать данные? Всё равно же массивами, а не структурами/объектами? Просто, может быть, std::vector? Или как?