Я унаследовал код, используя ReadFile
метод Windows API для чтения одного байта из параллельного порта в цикле.
Код передал CString
instance в качестве аргумента буфера, а 1 - количество прочитанных байтов, что-то вроде этого:
CString inBuffer = "";
bResult = ReadFile(hCom, inBuffer.GetBuffer(1), 1, &nBytesRead, NULL);
allData += inBuffer.GetBuffer(1);
Он долго работал с этим кодом, но иногда вызывал странные проблемы, например, ввод, отправленный с машины, когда «AV01000» читался как «AkVk0k1k0k0k0» - каким-то образом какой-то случайный символ добавлялся после каждого прочитанного символа.
Мне потребовалось много времени, чтобы выяснить источник этого поведения, и после изменения кода на:
char buffer = '\0';
bResult = ReadFile(hCom, &buffer, 1, &nBytesRead, NULL);
allData += buffer;
Он работал безупречно, считывая точные данные, отправленные машиной.
Это некое переполнение буфера во внутреннем коде CString
? Если нет, что может объяснить это странное поведение?