Чтение байтовых данных через последовательный порт в C ++ / CLI - PullRequest
1 голос
/ 14 апреля 2011

Я пытаюсь создать интерфейс с другой программой, поэтому мне нужно использовать C ++.

Прошло много лет с тех пор, как я программировал на C ++, и у меня была эта проблема около недели, поэтому я постепенно начинаю понимать, как все работает.

Я хочу прочитать байтовые данные, поступающие с устройства с последовательным портом.

Я подтвердил, что могу получать текст через последовательный порт с помощью команды readline:

Например:

String^ message = _serialPort->Readline();

То, как данные считываются в примере из MSDN, который я получил, чтобы работать успешно.

Однако я несколько раз пытался изменить его, и мне не повезло, что он придумал что-то, что считывает данные в байтах. (У меня уже есть преобразование байтовых данных в строку, поэтому я могу видеть такие байты, как число 15, равное 0f в байтах.)

Изменение кода на

wchar_t message = _serialPort->Readline();

дает мне

error c2440: 'initializing' : cannot convert from System::String ^' to 'wchar_t'.

Я не знаком с Readline. Это только для строк? Я проверил, что он работает со строками, и если я использую последовательное устройство, которое отправляет строку, первый набор кода работает.

Может кто-нибудь объяснить, какой метод я мог бы использовать для чтения байтовых данных? Спасибо.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Если вы действительно хотите использовать C ++, а не C ++ / CLI, я рекомендую использовать boost . asio .Он хорошо зарекомендовал себя, относительно прост для понимания и обладает определенным набором функций только для работы с последовательными портами .

1 голос
/ 14 апреля 2011

Обновление

Чистые версии C ++ Win32 API:

См. Следующие полезные ссылки

Есть ли какая-либо конкретная причина, по которой вы делаете это в коде C ++ / CLI?

Я подумал, что вы можете даже не знать об этом (в противном случае отметьте свои вопросы, пожалуйста).

Строка ^, Readline и т. Д. Являются функциями CLR (т. Е. .NET, подумайте: «вы могли бысделать это проще в C #). Итак, опять же,

  • Если есть необходимость в C ++, почему бы вам не взглянуть на собственный Win32 API
  • В противном случае, почему вы беспокоитесь о C ++

Если вы действительно хотели C ++ / CLI, я предлагаю не смешивать нативный / управляемый код при обработке последовательного ввода-вывода. Вы можете получить UnmanagedMemoryStream для маршалинга данных в / изуправляемых земель.

$ 0,02

...