Перечитал кучу статей (в т.ч. "Секреты маршалинга"), но так и не смог разобраться с вопросом.
Мне необходимо передать с внутреннего COM-сервера сервера клинту массив структр, при чем клиент написан на C#, поэтому фокусы с передачей данных в виде BSTR не желательны. Сейчас я передаю их в виде SAFEARRAY-в, количеством равных кол-ву полей структуры, что, мне кажется, во-первых, не самое быстрое и изящное решение, а во-вторых, добавляет возни при изменении структуры.
Интерфейс объекта, отвечающий за передачу данных, унаследован от IUnknown. Он возбуждает некое пользовательское событие OnDataRecieve, "подписываясь" на которое, клиент получает данные.