Re[2]: потоки и COM
От: x2004  
Дата: 13.08.03 13:06
Оценка:
Здравствуйте, 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.
Асинхронный вызов проходит очень часто. Если не сложно, что мне выбрать конкретнее?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.