【发布时间】:2010-11-15 19:41:15
【问题描述】:
我遇到了我的应用程序的奇怪行为。我想在 MDI 应用程序中关闭框架窗口,所以我将 WM_SYSCOMMAND (SC_CLOSE) 发送到该窗口。之后,我收到 OnSysCommand。然后我调用 CMDIChildWnd::OnSysCommand 继续处理。
问题是,有时 OnSysCommand 的基本实现调用 OnClose 并且我的框架被破坏,有时没有。我进行了调查,似乎 _NtUserMessageCall 中出现了差异(实际上这个方法调用了一些失败的内核模式函数)。 当 WS_SYSCOMMAND 成功时,_NtUserMessageCall 调用 DispatchHook 和一大堆 user32.dll 方法,我的消息到达目标窗口。如果失败,则不关闭框架窗口并且不调用 OnClose。
我想不出什么会导致这种奇怪的行为。我用 Application Verifier 检查了应用程序,一切似乎都很好。还有一件事,只有当我的应用程序通过 COM 启动时才会出现问题。
我与这个问题斗争了两天,我需要一些新的线索来继续挖掘。
【问题讨论】:
标签: c++ windows winapi com mfc