我正在将一些Win32代码移植到Win64。旧代码使用PrintDlg(),并且可以在所有版本的Windows(32位和64位)上正常运行。新代码没有!
如果我在Win64应用程序中设置了全零PRINTDLG结构,在lStructSize字段中放置“ 120”,然后调用PrintDlg(),则不会显示对话框,并且应用程序崩溃。
但是,如果我在Visual Studio 2017 Pro中运行完全相同的图像,则对话框每次都能按预期工作!
关于(a)为什么在VS中起作用,但是直接运行时会崩溃的想法?而且(b),我该怎么做才能解决该问题?!
布莱恩
答案 0 :(得分:0)
虽然我仍然不确定为什么我的代码可以在VS2017环境中运行,但不能在独立应用程序中运行,但我已经找到了使我的代码运行的方法。
这取决于堆栈指针RSP:在进入我的应用程序(Prolog编译器)时,我分配自己的大型运行时可变私有堆栈,并将RSP设置在其顶部。
如果我在私有堆栈中使用RSP调用PrintDlg()函数,则会导致GPF。如果我将其重置为原始Windows堆栈,则该功能将按预期工作。
仅需要我的“ WINAPI”宏中的另一行代码-“ MOV RSP,_OriginalRSP”。
伙计,谢谢您的时间。
布莱恩