Как маршалировать COM-объект на стороне сервера в Visual C ++? - PullRequest
0 голосов
/ 13 октября 2009

У меня есть COM-сервер вне процесса с ATL Simple Object, который создает другой поток. Новый поток должен будет делать вызовы к объекту ATL Simple. Поскольку ATL Simple Object и новый поток создаются в разных квартирах, ATL Simple Object нуждается в маршалироваться в новом потоке, в противном случае будет сгенерирована ошибка 0x8001010e.

Как мне упорядочить COM-объект на стороне сервера или я что-то упустил?

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 14 октября 2009

Взгляните на CoMarshalInterThreadInterfaceInStream . Если вы воспользуетесь Google, вы найдете несколько примеров, как его использовать.

Надеюсь, это поможет.

0 голосов
/ 30 марта 2010

Если вы знакомы с ATL - я предлагаю вам использовать CComGITPtr . Это умный указатель, который может публиковать ваши интерфейсы в таблице Global Interface, и вы можете позже связаться с ними из других квартир. Но GIT является глобальным с точки зрения одного процесса.

Еще один момент - реализуете ли вы заглушку прокси для вашего простого объекта ATL? Если вы не создаете заглушку прокси, то ваш простой объект ATL должен предоставить и реализовать IDispatch. С его помощью прокси будет создан автоматически.

0 голосов
/ 13 октября 2009

Приношу свои извинения, если этот ответ еще не получен, но мне неясно, что именно вы пытаетесь достичь.

Я думаю, что это проблема проектирования, а не реализации. Почему Простой Объект не создан в / с новым потоком?

Если вы хотите общаться через границу потока, я предлагаю использовать один из широко распространенных шаблонов (Почтовый ящик, Событие), чтобы сигнализировать диспетчеру нового потока о выполнении операций в следующий раз, когда он станет доступен.

Не могли бы вы уточнить детали вопроса? Я бы с радостью помог, так как это похоже на мой переулок ...

...