为了捕获64位的指针截断错误,我添加了here提到的代码片段,它保留了最低4GB的内存,因此分配高于32位。在MFC x64测试应用程序中,我在InitInstance()中首先调用预留函数。然后我添加了一个简单的按钮:
CFileDialog dlg(TRUE);
dlg.DoModal();
调用DoModal最终会在“无人区”中使用callstack在某处崩溃:
> 000000018000163b()
0000000100000024()
0000000000000001()
这不是MFC特定的,因为我得到了与.NET FileDialog相同的行为。我认为这是我手中的事情,因为实际的fileDialog会短暂显示然后崩溃。感觉像是一个shell扩展或其他东西,但我无法得到它来自哪里,因为调用堆栈没有帮助 - 但我想知道我能做什么!
如果删除特殊预约功能,我就不会再崩溃了。
困惑!
答案 0 :(得分:1)
我无法重现此次崩溃。我创建了一个64位项目,添加了4 GB预留,并在其中打开了一个文件对话框。没有崩溃。
我的复制品与您的复制品不匹配,或者您的系统上有不同的东西。您应该发布您的项目,以便我们可以删除其中一个变量。
不幸的是我不记得TppWorkerThread是什么。
发布您的项目 - 所有源文件,资源文件,.vcxproj文件和.sln文件。然后我们可以调查。
答案 1 :(得分:1)
为了跟进这个问题,我们发现360 sdk安装的shell扩展会导致问题(xeshlext.dll)