C++ C++;打印机don';我不想打印

C++ C++;打印机don';我不想打印,c++,windows,printing,C++,Windows,Printing,我的代码有错误。我的打印机名为“XP—58”,不从C++程序中打印文本。 但当我从notepat运行print时,它工作正常。 我的C++代码< /P> int _tmain(int argc, _TCHAR* argv[]) { LPTSTR printerName = (LPTSTR)_T("XP-58"); CString str = "la-la-la"; LPBYTE pByte = new BYTE[str.GetLength() + 1]; memc

我的代码有错误。我的打印机名为“XP—58”,不从C++程序中打印文本。 但当我从notepat运行print时,它工作正常。 我的C++代码< /P>
int _tmain(int argc, _TCHAR* argv[])
{
    LPTSTR printerName = (LPTSTR)_T("XP-58");
    CString str = "la-la-la";
    LPBYTE pByte = new BYTE[str.GetLength() + 1];
    memcpy(pByte, (VOID*)LPCTSTR(str), str.GetLength());
    DWORD count = 7;
    BOOL result = RawDataToPrinter(printerName, pByte, count);
    std::cout << result << std::endl;
    system("pause");
    return 0;
}
int-tmain(int-argc,_-TCHAR*argv[]
{
LPTSTR printerName=(LPTSTR)T(“XP-58”);
CString str=“la la”;
LPBYTE pByte=新字节[str.GetLength()+1];
memcpy(pByte,(VOID*)LPCTSTR(str),str.GetLength();
德沃德计数=7;
BOOL result=RawDataToPrinter(printerName、pByte、count);

std::cout打印机不知道您已发送完所有内容,因此无法打印

要完成一行,需要在字符串中添加字符
“\r\n”


完成页面后,将
“\f”
添加到字符串。

打印机不知道您已完成发送所有内容,因此无法打印

要完成一行,需要在字符串中添加字符
“\r\n”


完成页面后,将
“\f”
添加到字符串。

打印机不知道您已完成发送所有内容,因此无法打印

要完成一行,需要在字符串中添加字符
“\r\n”


完成页面后,将
“\f”
添加到字符串。

打印机不知道您已完成发送所有内容,因此无法打印

要完成一行,需要在字符串中添加字符
“\r\n”

完成页面后,将
“\f”
添加到字符串中。

应该帮助你。应该帮助你。应该帮助你。应该帮助你。应该帮助你。
#include "stdafx.h"
#include <Windows.h>
#include <Winspool.h>
#include <CommDlg.h>
#include <math.h>
#include <atlstr.h>
#include <iostream>


BOOL RawDataToPrinter(LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    BOOL     bStatus = FALSE;
    HANDLE     hPrinter = NULL;
    DOC_INFO_1 DocInfo;
    DWORD      dwJob = 0L;
    DWORD      dwBytesWritten = 0L;

    // Open a handle to the printer. 
    bStatus = OpenPrinter( szPrinterName, &hPrinter, NULL );
    if (bStatus) {
        // Fill in the structure with info about this "document." 
        DocInfo.pDocName = (LPTSTR)_T("chargebox barcode check");
        DocInfo.pOutputFile = NULL;
        DocInfo.pDatatype = (LPTSTR)_T("RAW");

        // Inform the spooler the document is beginning. 
        dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo );
        if (dwJob > 0) {
            // Start a page. 
            bStatus = StartPagePrinter( hPrinter );
            if (bStatus) {
                // Send the data to the printer. 
                bStatus = WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten);
                EndPagePrinter (hPrinter);
            }
            // Inform the spooler that the document is ending. 
            EndDocPrinter( hPrinter );
        }
        // Close the printer handle. 
        ClosePrinter( hPrinter );
    }
    // Check to see if correct number of bytes were written. 
    if (!bStatus || (dwBytesWritten != dwCount)) {
        bStatus = FALSE;
    } else {
        bStatus = TRUE;
    }
    return bStatus;
}


int _tmain(int argc, _TCHAR* argv[])
{
    LPTSTR printerName = (LPTSTR)_T("XP-58");
    CStringW str = L"unicode";
    int bytelen = 2 * str.GetLength();
    LPBYTE pByte = new BYTE[bytelen];
    memcpy(pByte, str, bytelen);
    DWORD count = bytelen;
    BOOL result = RawDataToPrinter(printerName, pByte, count);
    std::cout << GetLastError() << std::endl;
    std::cout << result << std::endl;
    system("pause");
    return(0);
}