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