StartDoc的问题
时间:2011-12-21
来源:互联网
我用API写了个打印的程序,但是有时候在执行到StartDoc的时候会有异常:在Win7下程序会停止执行、无响应;在WinXp下程序会异常退出。
主要代码如下:
C/C++ code
其中,szprinter是打印机信息字符串,如“Adobe PDF,Adobe PDF Converter”。该字符串逗号前后的内容分别是LPPRINTER_INFO_2结构的pPrinterName成员和pDriverName成员,LPPRINTER_INFO_2结构的值通过EnumPrinters函数获取。
哪位老兄帮忙看一下原因,非常感谢!!
主要代码如下:
C/C++ code
if(NULL!=(szDevice=strtok(szprinter,",")) && NULL!=(szDriver=strtok(NULL,","))) { if((hdcprint=CreateDC(szDriver,szDevice,NULL,NULL))!=0) { if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业 { //打印... } else { WriteLog("StartDoc failed!"); } } else { WriteLog("CreateDC failed!"); } } else { WriteLog("Failed to get printer info.!"); }
其中,szprinter是打印机信息字符串,如“Adobe PDF,Adobe PDF Converter”。该字符串逗号前后的内容分别是LPPRINTER_INFO_2结构的pPrinterName成员和pDriverName成员,LPPRINTER_INFO_2结构的值通过EnumPrinters函数获取。
哪位老兄帮忙看一下原因,非常感谢!!
作者: ashamwolf 发布时间: 2011-12-21
补充一下,出现问题的时候,程序就停在StartDoc这条语句上,后面的WriteLog("StartDoc failed!");
没有写到日志中。
由于出现的几率不高,所以很难跟踪。
另外还有一个情况就是,连续打印大概76-77笔的时候,CreateDC就失败了,写入日志的错误说明是“传递给系统调用的数据区域太小”。
下面把释放内存的代码补充进来:
C/C++ code
没有写到日志中。
由于出现的几率不高,所以很难跟踪。
另外还有一个情况就是,连续打印大概76-77笔的时候,CreateDC就失败了,写入日志的错误说明是“传递给系统调用的数据区域太小”。
下面把释放内存的代码补充进来:
C/C++ code
HDC hdcprint; static DOCINFO di={sizeof(DOCINFO),"printer",NULL,NULL,0}; if(NULL!=(szDevice=strtok(szprinter,",")) && NULL!=(szDriver=strtok(NULL,","))) { if((hdcprint=CreateDC(szDriver,szDevice,NULL,NULL))!=0) { if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业 { hfont = CreateFont(...); oldfont = (HFONT)::SelectObject(hdcprint, hfont); //打印... RestoreDC(hdcprint,-1); //恢复打印机设备句柄 EndPage(hdcprint); //打印机停纸,停止打印 EndDoc(hdcprint); //结束一个打印作业 } else { WriteLog("StartDoc failed!"); } SelectObject(hdcprint, oldfont); DeleteObject(hfont); DeleteDC(hdcprint); } else { WriteLog("CreateDC failed!"); } } else { WriteLog("Failed to get printer info.!"); }
作者: ashamwolf 发布时间: 2011-12-21
没有人知道吗
作者: ashamwolf 发布时间: 2011-12-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28