Я работаю над утилитой Windows, которая взаимодействует с некоторым нестандартным оборудованием через стандартный COM-порт. Протокол связи (который находится вне моего контроля) требует от меня передачи и приема необработанных 8-битных байтов данных.
В настоящее время я использую следующую функцию Windows API для отправки данных на COM-порт:
WriteFile(hFile, lpBuffer, numberOfBytesToWrite, ...)
, где hFile
- ссылка на правильно открытый COM-порт, а lpBuffer
- массив байтов, которые я сохранил в памяти. Код работает отлично, пока на устройство не будет отправлен нулевой символ (ноль ASCII). WriteFile
прекращает отправку, как только обнаруживает нулевой символ, поскольку предполагается, что он достиг конца строки. Это происходит, хотя я правильно установил numberOfBytesToWrite
.
Как я могу отправлять необработанные данные на COM-порт с помощью Windows API? Я бы предпочел использовать стандартный вызов API, аналогичный WriteFile
, но я открыт для предложений.
В настоящее время я использую RapidQ для сборки утилиты, но все, что она делает - это напрямую вызывает функцию Windows API.
Редактировать: Моя установка состоит из ПК с Windows, подключенного через последовательный порт к пользовательскому аппаратному модулю. Модуль имеет небольшой экран, на котором я могу просматривать переданные символы. Я проверил эту настройку с другой сторонней утилитой. Я могу общаться с модулем с помощью этой сторонней программы, и нулевые символы отображаются правильно. В моей собственной программе, когда я использую WriteFile
, нулевой символ в любом месте в потоке передачи останавливает отправку остатков потока.