Исходящий вызов COM приводит к тому, что «исходящий вызов не может быть выполнен, поскольку приложение отправляет вызов, синхронный с вводом».

У меня есть COM-сервер (C ++ / STA (приложение на основе MFC)) и COM-клиент (C # / MTA). COM-сервер должен находиться в STA, поскольку это приложение MFC (у меня нет выбора в этом вопросе). Клиент отправляет вызов серверу, а сервер отправляет обратный вызов клиенту. Вот где происходит ошибка ( RPC_E_CANTCALLOUT_ININPUTSYNCCALL ). Я предполагаю, что если бы сервер был MTA, эта проблема никогда бы не возникла, но, к сожалению, документация для MFC явно отрицает инициализацию квартиры как MTA.

Есть идеи, как обойти эту проблему?

Я раздумывал над идеей позволить объекту сервера (объекту, который я показываю через таблицу запущенных объектов) жить в собственном апартаменте (MTA). Будет ли это хорошей идеей или есть что-то попроще, чтобы попробовать сначала?

ОБНОВЛЕНИЕ

Серверный объект - это просто тонкий интерфейс, указывающий на определенные функции в приложении. В большинстве случаев он просто читает и записывает в ячейки памяти, но есть случаи, когда он генерирует оконные сообщения для различных окон в приложении. Сам объект сервера - это не все приложение.

10
задан Jörgen Sigvardsson 7 July 2011 в 12:36
поделиться