我正在使用 C++ Builder XE7 VCL。
UTC 时间 2016 年 8 月 11 日下午 2:00 左右,我开始收到我的用户群关于打印问题的多起投诉。这些打印模块中的大多数已被证明多年稳定,在过去的 24 小时内我的项目没有更新。我能够在我的开发/测试环境中重现类似的问题。
在不涉及我的项目的许多细节的情况下,让我介绍一个非常简单的打印程序,它失败了:
void __fastcall TForm1::PrintButtonClick(TObject *Sender)
{
// Test Print:
TPrinter *Prntr = Printer();
Prntr->Title = "Test_";
Prntr->BeginDoc();
Prntr->Canvas->Font->Size = 10;
Prntr->Canvas->TextOut(300,1050,"* * * Printing Test * * *");
if (Prntr->Printing) {
Prntr->EndDoc();
}
}
在第一次尝试打印时,一切都按预期完美运行。如果我再次单击该按钮,TPrinter
会生成一个小 PDF,但该 PDF 文件实际上已损坏并且似乎有一个文件句柄粘在它上面。
如果我第三次单击该按钮,则无法打印,并且出现以下错误消息:
Printer is not currently printing.
我自己的测试是使用 PDF 打印机驱动程序完成的,但我收到的用户投诉包括各种本地打印机、网络打印机、PDF 打印机等。
在我的实际项目中,我有try/catch
异常处理,所以实际结果略有不同,但与这个结果基本相似。结果显示了不稳定和/或内存泄漏的特征,而没有太多的错误消息。
我怀疑可能有一些 Microsoft Windows 更新与 Embarcadero DLL 纠缠不清,但到目前为止我还无法验证这一点。
其他人有类似的问题吗?