Как передать команды ESC / POS методу WriteFile FileAPI?

У меня проблемы с командами 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

Решение

Итак, после нескольких часов отладки я обнаружил, что с моим кодом есть 2 проблемы:
1) По какой-то причине команда ESC / POS, которая работает с C # + пространством имен Windows.Devices.USB, не работает с текущим подходом WriteFile. Я предполагаю, что Windows.Devices.USB делает намного больше за кулисами и каким-то образом удается заставить его работать. Команда, которая работает с простым файлом записи: 0x1B, 0x70, 0x00, 0x98, 0x00.
2) Как написано @JohnnyMopp & @MarkRanson неправильный способ измерения размера буфера. Большое спасибо за помощь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]