为了捕获64位的指针截断错误,我添加了这里提到的代码片段,它保留了底部4GB的内存,因此allocs高于32位.在MFC x64测试应用程序中,我在InitInstance()中首先调用预留函数.然后我添加了一个简单的按钮:
CFileDialog dlg(TRUE);
dlg.DoModal();
Run Code Online (Sandbox Code Playgroud)
调用DoModal最终在某个地方遇到了一个"无人地带"的callstack:
> 000000018000163b()
0000000100000024()
0000000000000001()
Run Code Online (Sandbox Code Playgroud)
这不是MFC特定的,因为我得到了与.NET FileDialog相同的行为.我认为这是我手中的事情,因为实际的fileDialog会短暂显示然后崩溃.感觉像一个shell扩展或者其他东西,但我无法得到它来自哪里,因为调用堆栈没有帮助 - 但我想知道我能做什么!
如果我删除了特殊预约功能,我就不会再崩溃了.
困惑!