模态对话框的COM编组问题

时间:2010-08-26 17:20:35

标签: multithreading com mfc marshalling

我想将在C ++ / MFC8程序的主线程中创建的COM对象传递给另一个线程,并将所有同步保留给COM。使用CoMarshalInterThreadInterfaceInStream工作 - 直到用户打开模态对话框。当对话框打开时,显然所有的编组信息都被拒绝了,我有点理解,因为它们可能造成严重破坏,例如:通过重新进入模态对话框。问题是,涉及线程的其中一个操作应该是从模态对话框触发的,所以如果拒绝只是一个安全措施,我想把它关闭。

我试过的一个黑客是让对话框非模态并在打开时禁用主窗口。结果禁用主窗口使编组失败。这特别让我感到惊讶,因为接收消息的窗口不是主窗口,而是一个特殊的隐藏窗口(由Microsoft记录)。因此,某些代码必须明确检查主窗口的“已启用”状态。事实上,我可以看到消息(发送到该特殊窗口的WM_USER)到达程序的消息循环并通过DispatchMessage继续前进,但后来我忘记了它们。

所以我想知道他们接下来会去哪里(只会失望地回来)。我认为AfxOleGetMessageFilter可能会引导我到某个地方,但是它返回的对象的实现中的断点甚至都没有被击中。所以,如果有人知道在哪里看,我将非常感激。当然,也欢迎使用解决方法的想法。 (我能想到的最好的方法是让对话非模态,然后暂时重新启用下面的主窗口.Yuk!)

(如果有人想在一个最小的例子上测试这个,我可以试着想出一个,但它不会小。请提前感谢!)

0 个答案:

没有答案
相关问题