MFC用户界面自动关闭
如果任何UI自动化客户端处于活动状态(如Inspect.Windows Eyes、UI Spy等),我们的MFC应用程序将在关机期间挂起 原因是如果存在任何Ole对象,BOOL AFXAPI AfxOleCanExitApp()将返回false。然后应用程序进入隐藏服务器模式 我曾看到过类似的帖子处理文档对象。一般的解决方案是将对象计数设置为0,正常关闭,然后在主帧的OnClose中将计数设置回原来的值。 这是一个糟糕的UI自动化解决方案。它会导致内存泄漏和客户端应用程序中的无效对象(一段时间后实际崩溃)MFC用户界面自动关闭,mfc,ui-automation,Mfc,Ui Automation,如果任何UI自动化客户端处于活动状态(如Inspect.Windows Eyes、UI Spy等),我们的MFC应用程序将在关机期间挂起 原因是如果存在任何Ole对象,BOOL AFXAPI AfxOleCanExitApp()将返回false。然后应用程序进入隐藏服务器模式 我曾看到过类似的帖子处理文档对象。一般的解决方案是将对象计数设置为0,正常关闭,然后在主帧的OnClose中将计数设置回原来的值。 这是一个糟糕的UI自动化解决方案。它会导致内存泄漏和客户端应用程序中的无效对象(一段时间后
有没有人见过一种正确的方法来告诉用户界面客户端此服务器将离开并释放所有对象?没有真正好的方法来关闭它。当任何服务器仍在使用时,没有任何优雅的方法来停止它。您只能进行必要的清理
所以如果你想强制关机。尽可能断开连接。尽可能多的免费资源。然后忽略应用程序锁计数并退出。内存被释放,即使调试版本将报告泄漏。有问题的只有在关闭应用程序时可能需要更好处理的其他资源(文件、互斥体、系统对象…)。只是确认我也随机经历过这种行为。我在这里找到了Microsoft官方对此问题的答案。。。他们的解决方案是取消锁定机制。我看不出这是如何解决根本问题的。谢谢xMRi。恐怕情况就是这样。这些对象隐藏在MFC UI自动化基础设施中。我找到了它们的创建位置,但comptr没有添加到任何列表中。IAccessible接口定义了诸如EVENT_OBJECT_DESTROY之类的事件,但是我在MFC源代码中找不到它的使用实例。UI自动化不是正常的COM场景。通常,您有一台服务器,多个客户端使用它。在这里,我们有一个客户端,它使用在整个计算机使用过程中必须运行的每个应用程序。微软一定考虑到了这一点,对吗?