gpt4 book ai didi

c - Win32 PrintDlg、PrintDlgEx、崩溃和怪异

转载 作者:行者123 更新时间:2023-12-02 01:30:45 27 4
gpt4 key购买 nike

我的任务是解决以下问题:当 PrintDlg() 在 64 位计算机上运行时,我的应用程序崩溃了函数被调用。

经过深思熟虑,我决定最好的解决方案是用它的大哥 PrintDlgEx() 替换 PrintDlg() 的原始调用。 .

这样做可以解决一个问题(它不再崩溃!),但会导致另一个问题。当我执行代码时,它显示打印对话框,只是返回成功代码,并为我提供默认打印机的所有信息。我需要这个功能来显示标准的“打印设置”窗口,我不知道到底如何实现它。下面显示的是我尝试用来显示对话框的示例值。

有什么想法吗?提前致谢。

//  Initialize the PRINTDLGEX structure.
pd2.lStructSize = sizeof(PRINTDLGEX);
pd2.hwndOwner = wnddata->wnd.hnd;
pd2.hDevMode = NULL;
pd2.hDevNames = NULL;
pd2.hDC = NULL;
pd2.Flags = PD_RETURNDC | PD_COLLATE;
pd2.Flags2 = 0;
pd2.ExclusionFlags = 0;
pd2.nPageRanges = 0;
pd2.nMaxPageRanges = 10;
pd2.lpPageRanges = NULL;
pd2.nMinPage = 1;
pd2.nMaxPage = 1000;
pd2.nCopies = 1;
pd2.hInstance = 0;
pd2.lpPrintTemplateName = NULL;
pd2.lpCallback = NULL;
pd2.nPropertyPages = 0;
pd2.lphPropertyPages = NULL;
pd2.nStartPage = START_PAGE_GENERAL;
pd2.dwResultAction = 0;
pdrc = PrintDlgEx (&pd2);

最佳答案

由于未能阅读 PRINTDLGEX 上的细则,您很可能会收到 E_INVALIDARG 返回代码。结构。具体来说,它表示“如果未指定 PD_NOPAGENUMS 标志,则 lpPageRanges 必须为非 NULL。”

PrintDlg/PrintDlgEx 的根本问题是由于 WinMain 上缺少属性造成的。您需要将 WinMain 标记为 [STAThreadAttribute] 以指示您的 COM 线程模型是单线程单元。其他线程模型可能有效,但我不能肯定。

关于c - Win32 PrintDlg、PrintDlgEx、崩溃和怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6297077/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com