我有一个C ++ mfc应用程序,我试图使用CMultiDocTemplate一次打开许多文档。 我发现只要我为第157个文档调用InitialUpdateFrame,应用程序就会崩溃。 谁能告诉我这个限制在哪里? 非常感谢!
答案 0 :(得分:3)
最可能的原因 - 您达到了Windows USER或GDI对象限制。默认情况下,进程无法创建超过10000个USER和10000个GDI对象。如果您的文档视图包含许多控件/图形对象,则很容易超出限制。 10000/157 = 63。
因此,如果您的文档视图创建了63个或更多USER objects(窗口,图标,游标等)或GDI objects(位图,笔,画笔,字体等),MFC将抛出CResourceException
异常如果你没有明确处理它,应用程序将因未处理的异常而中止。
检查这是否是您问题的真正根本原因非常容易。打开任务管理器,在菜单Processes
检查View->Select columns...
和USER Objects
中选择GDI Objects
标签。运行您的应用程序,查看应用程序流程消耗的对象数。
有关详细信息,请参阅此优秀文章:Pushing the Limits of Windows: USER and GDI Objects。