Здравствуйте, UnrealAlex, Вы писали:
UA>Здравствуйте, <Аноним>, Вы писали:
А>>Народ. У меня такой трабл: А>>есть два процесса: А>>в первом есть один COM объект A А>>во втором два COM объекта B , C
А>>Объекты B и C исполняются в разных потоках. А>>Объект B получает указатель на объект A. А>>Я передаю его в объект C, после чего пытаюсь запросить нужный мне интерфейс и вызвать метод. Мне выдают ошибку связанную с маршалингом. Как это обойти? UA>Объект B получает на самом деле прокси интерфейса объекта A. Пытаясь вызвать метод из другого потока прокся возврящяет ошибку. UA>Возможно 2 варианта UA>1. Использовать неявный маршалинг, т. е. передать интерфейс объекту C их объекта B через метод, но в этом случае объект B должен держать отмаршалированную ссылку на объект С. UA>2. Использовать GIT UA>3. Использовать апи-функции CoMarshalInterface, CoUnmarshalInterface
UA>NB! Поскольку ты будешь маршалить прокси нужно учесть 2 вещи UA>1. Апартамент в котором живет объект B должен жить до тех пор пока ты не отпустишь ссылку из объекта C на объект A UA>2. Если захочешь несколько раз размаршаливать, то нельзя использовать CoMarshalInterface с параметром MSHLFLAGS_TABLESTRONG он не умеет маршалить прокси — придеться воспользоватьмя GIT-ом
Функции объекта A требуются в обработчике асинхронного вызова в объекте B.
Асинхронный вызов проходит очень часто. Если не сложно, что мне выбрать конкретнее?