vc下打印机打印的问题
整个打印源码如下:
STDMETHODIMP CPrinterInterface::OnPrint(ULONG* pData, ULONG* pParaData, ULONG lData)
{
// TODO: 在此添加实现代码
IOmRonPlcMain* pIOmRonPlcMain = (IOmRonPlcMain*)(*pParaData);
TCHAR szPrinter[100];
char *szDevice,*szDriver,*szOutput;
HDC hdcPrint = NULL;
//取得设备字符串
static DOCINFO di={sizeof(DOCINFO),_T("printer"),NULL};
DWORD strTemp = GetProfileString(_T("windows"),_T("device"),_T(",,,"),szPrinter,100);
//分解字符串
int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, szPrinter, wcslen (szPrinter), NULL, 0, 0, 0) + 2; //这里的+2是指宽字符的结束符
char* szcPrinter;
szcPrinter = new char[nOutputStrLen];
WideCharToMultiByte(CP_ACP, 0, szPrinter, wcslen (szPrinter)+1, szcPrinter, nOutputStrLen, 0, 0); //这里的+1是指结束符
if ((NULL!=(szDevice=strtok(szcPrinter,",")))&&(NULL!=(szDriver=strtok(NULL,",")))&&(NULL!=(szOutput=strtok(NULL,","))))
{
//创建打印设备句柄
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, szOutput, -1, NULL, 0);
wchar_t *pwOutput;
pwOutput = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, szOutput, -1, pwOutput, dwNum);
dwNum = MultiByteToWideChar (CP_ACP, 0, szDriver, -1, NULL, 0);
wchar_t *pwDriver;
pwDriver = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, szDriver, -1, pwDriver, dwNum);
dwNum = MultiByteToWideChar (CP_ACP, 0, szDevice, -1, NULL, 0);
wchar_t *pwDevice;
pwDevice = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, szDevice, -1, pwDevice, dwNum);
if (/*hdcPrint!=NULL*/(hdcPrint=CreateDC(pwDriver,pwDevice,pwOutput,NULL))!=NULL)
{
//开始执行打印作业
if (StartDoc(hdcPrint,&di)>0)
{
int nTest = StartPage(hdcPrint); //开始走纸
SaveDC(hdcPrint); //保存打印机设备句柄
CRect rcClient;
GetClientRect((HWND)(*pData),&rcClient);
TextOut(hdcPrint,1,1,_T("HELLOWORD!"),16);
pIOmRonPlcMain->Draw((ULONG)hdcPrint,rcClient.left,rcClient.top,rcClient.right,rcClient.bottom);
DWORD dwNeeded = 0;
DWORD dwReturned = 0;
if(EnumJobs(hdcPrint,0,0xFFFFFFFF,NULL,0,NULL,0,&dwNeeded))
{
if(GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
ClosePrinter(hdcPrint);
return FALSE;
}
}
RestoreDC(hdcPrint,-1); //恢复打印机设备句柄
if (nTest = EndPage(hdcPrint)>0)
{
DWORD nTemp = GetLastError();
nTest = EndDoc(hdcPrint);
nTemp = GetLastError();
}
DeleteDC(hdcPrint);
}
}
if(pwDevice)
{
delete []pwDevice;
pwDevice = NULL;
}
if(pwDriver)
{
delete []pwDriver;
pwDriver = NULL;
}
if(pwOutput)
{
delete []pwOutput;
pwOutput = NULL;
}
}
else
{
//MessageBox(_T("没有默认打印机,或者没有安装打印机!"));
return S_OK;
}
return S_OK;
}
现在的问题是,调用EndPage()总是返回-1,错误,求高人指点啊