Я хотел бы передать COM-объект, созданный в основном потоке моей программы на C ++ / MFC8, в другой поток и оставить всю синхронизацию для COM. Использование CoMarshalInterThreadInterfaceInStream работает - пока пользователь не откроет модальное диалоговое окно. В то время как диалог открыт, очевидно, все сообщения о сортировке отклоняются, что я понимаю, потому что они могут нанести ущерб, например, путем повторного входа в модальный диалог. Дело в том, что одна из операций, связанных с потоком, должна запускаться из модального диалога, поэтому, если отклонение является лишь мерой безопасности, я бы хотел отключить его.
Один из способов, который я пробовал, - сделать диалог немодальным и отключить главное окно, пока оно открыто. Оказывается, отключение главного окна также приводит к сбою сортировки. Это особенно удивляет меня, потому что окно получения сообщений - это не главное окно, а специальное скрытое (как задокументировано Microsoft). Таким образом, некоторый код должен явно проверять состояние «включено» главного окна. Фактически, я вижу сообщения (WM_USER, отправленные в это специальное окно), поступающие в цикл сообщений программы и идущие через DispatchMessage, но затем я теряю их.
Так что мне интересно, куда они пойдут дальше (только чтобы вернуться разочарованными). Я подумал, что AfxOleGetMessageFilter может куда-то привести меня, но точки останова в реализации возвращаемого объекта даже не достигаются. Так что если кто-то знает, где искать, я был бы очень признателен. Конечно, идеи для обходного пути также приветствуются. (Лучшее, что я мог придумать, это сделать диалог немодальным, а затем временно снова включить главное окно под ним. Юк!)
(Если кто-то хочет проверить это на минимальном примере, я могу попытаться найти его, но он не будет маленьким. Заранее спасибо!)