【发布时间】:2014-09-24 20:18:34
【问题描述】:
当特定打印机是默认打印机时,每当用户通过 PrintDlgEx 调出 Windows 打印对话框时,我们的程序就会崩溃。如果该打印机不是默认打印机,一切都很好,除非用户从对话框中选择该打印机,在这种情况下对话框立即崩溃。
打印机是 HP LaserJet Pro 400 M451nw,同一网络上的多台计算机尝试访问该打印机时会出现此问题。但是,其他程序可以打印到该打印机,包括记事本。计算机运行 32 位 Windows 7;该程序是用 VS C++ 编写的。
代码如下:
PRINTDLGEX printer = { 0 };
printer.lStructSize = sizeof( printer );
printer.hwndOwner = my_win;
printer.Flags = PD_RETURNDC | PD_NOPAGENUMS | PD_NOCURRENTPAGE | PD_USEDEVMODECOPIES;
printer.nCopies = 1;
printer.nStartPage = START_PAGE_GENERAL;
PrintDlgEx( &printer );
这是客户发给我的:
关于什么可能导致这样的崩溃,或者我们将如何解决这个问题的任何想法?
【问题讨论】:
-
您是否尝试过使用这些标志来查看其中一个是否会触发它?
-
可能与 COM 状态有关?例如,也许您正在使用多线程单元模型并且打印机驱动程序无法处理? (你记得初始化 COM 吗?)
-
@Jonathan Potter:我玩过很多标志(将其简化为 PD_RETURNDC 并添加其他成员变量,以及添加标志。不开心。
-
this question 是否适用?听起来很相似。
-
告诉我们有关“崩溃”的信息。至少是异常代码和堆栈跟踪。