Независимо от того, сколько я крутлю и поворачиваю, я не могу удалить себя из контекста STA в приложении, когда меня вызывают из клиента. Не имеет значения, если я размещаю объект сервера в MTA, я все же должен подчиняться законам COM. В данном случае STA - это действительно неприятное «исправительное учреждение». Я делаю трудное время ...
Это привело меня к довольно ужасному пути, но это работает. Вместо того чтобы использовать COM для связи с клиентом, я вручную перевожу свой собственный путь связи к MTA, на котором размещен объект сервера и ссылки на обратный вызов. Я в основном создаю свой собственный код сортировки, настраивая очередь вызовов (контейнер STL с параметрами для отправки), который поток MTA берет и доставляет клиенту. Ответ затем возвращается к коду, который отвечает на первоначальный вызов. Синхронизация выполняется с использованием объектов событий Win32.
К счастью, я не могу охватить много обратных вызовов, и механизм по своей природе статичен и будет использоваться только для моих собственных целей (не будет работать в производственной среде).
Ух ты ... Иногда я задаюсь вопросом, какой была бы жизнь, если бы вместо этого я решил стать плотником.