如何将ESC / POS命令传递给WriteFile FileAPI方法?

时间:2018-08-02 19:35:44

标签: c++ writefile escpos

我在使用ESC / POS命令时遇到麻烦。下面的代码可以很好地打印常规文本,但是当出现ESC / POS命令时,打印机什么也不做。我尝试了许多不同的方法来传递数据(请参见cData1&cData2)。任何人都可以帮助您指出正确的方式来传递命令吗?谢谢,奥利弗。

HANDLE  CreateFileResult;
BOOL    bResult;
PSP_INTERFACE_DEVICE_DETAIL_DATA dummy = GetDevices();

if (dummy != 0)
    {
    CreateFileResult = CreateFile(dummy->DevicePath, 
                                      GENERIC_WRITE | GENERIC_READ, 
                                      FILE_SHARE_WRITE | FILE_SHARE_READ, 
                                      NULL, 
                                      OPEN_ALWAYS, 
                                      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 
                                      NULL);

        if (INVALID_HANDLE_VALUE == CreateFileResult) 
        {
          std::cout << "Handle Failed " << std::endl;
        }
        else
        {

          char cData1[] = { (CHAR)27, (CHAR)112 , CHAR(0), CHAR(255), CHAR(0) };
          char cData2[] = { 0x1b, 0x70 ,0x00 ,0xFF ,0x00 };

            DWORD dwBytesToWrite = (DWORD)strlen(cData2);
            DWORD bytesWritten;
            OVERLAPPED osWrite = { 0,0,0 };


            WriteFile(CreateFileResult, cData2, dwBytesToWrite, &bytesWritten, &osWrite);
         }

1 个答案:

答案 0 :(得分:0)

因此,经过数小时的调试,我发现我的代码存在2个问题: 1)由于某种原因,与C#+ Windows.Devices.USB命名空间配合使用的ESC / POS命令不适用于当前的WriteFile方法。我的猜测是Windows.Devices.USB在幕后做了很多工作,并且设法使它工作。与简单writefile一起使用的命令是0x1B,0x70、0x00、0x98、0x00。 2)正如@JohnnyMopp和@MarkRanson所写,我测量缓冲区大小的方式是错误的。非常感谢您的帮助。