Я пытаюсь настроить arduino uno для связи через последовательный порт с программой на C ++ в visual studio 2010. Я работаю с кодом, найденным здесь: http://playground.arduino.cc/Interfacing/CPPWindows
К сожалению, файл .cpp выдает мне следующее сообщение для строки 9 для переменной ‘portName’:
Ошибка: аргумент типа «char *» несовместим с параметром типа «LPCWSTR»
Я не понимаю это сообщение об ошибке, и попытался несколько разных вещей, чтобы исправить это. Любая помощь будет принята с благодарностью!
Учитывая код ссылки в вашем вопросе, кажется, проблема здесь:
Serial::Serial(char *portName) { ... this->hSerial = CreateFile(portName, // <--- ERROR
CreateFile
Win32 API, который ожидает LPCTSTR
как первый строковый параметр .
LPCTSTR
является Win32 typedef, который расширен до:
const char*
в сборках ANSI / MBCSconst wchar_t*
в сборках Unicode (которые были по умолчанию с VS2005)Поскольку вы используете VS2010, вероятно, вы находитесь в режиме сборки Unicode по умолчанию.
На самом деле, нет «физического» CreateFile
API выставлен, но есть две разные функции: CreateFileA
а также CreateFileW
, Бывший занимает const char*
входная строка, последняя занимает const wchar_t*
,
В сборках Unicode, CreateFile
макрос препроцессора, расширенный до CreateFileW
; в сборках ANSI / MBCS, CreateFile
расширен до CreateFileA
,
Таким образом, если вы находитесь в режиме сборки Unicode, ваш вызов CreateFile расширяется до CreateFileW(const wchar_t*, ...)
, поскольку portName
определяется как char*
есть несоответствие между wchar_t*
а также char*
и вы получите ошибку компилятора.
Чтобы это исправить, у вас есть несколько вариантов.
Например, вы могли бы быть явным в вашем коде, и просто вызвать CreateFileA()
вместо CreateFile()
, Таким образом, вы будете использовать версию функции ANSI / MBCS (т.е. const char*
), независимо от фактических настроек ANSI / MBCS / Unicode в Visual Studio.
Другой вариант — изменить текущие параметры сборки с режима Unicode по умолчанию на ANSI / MBCS. Для этого вы можете следовать по пути:
Project Properties | Configuration Properties | General | Character Set
и выберите «Использовать многобайтовый набор символов», как показано на следующем скриншоте:
Ваши настройки в Visual Studio, вероятно, установлены на Unicode, но код, который вы компилируете, ожидает ASCII.
Перейдите в Свойства проекта -> Свойства конфигурации -> Общие -> Набор символов и выберите «Использовать многобайтовый набор символов».
-Surenthar
Ваши настройки в Visual Studio, вероятно, установлены на Unicode, но код, который вы компилируете, ожидает ASCII.
Перейдите в Свойства проекта -> Свойства конфигурации -> Общие -> Набор символов и выберите «Использовать многобайтовый набор символов».
Вы также должны удалить UNICODE
или же _UNICODE
из C ++ -> Preprocessor -> Определения препроцессора, если они там определены.
Это заставит ваш код вызывать ASCII-версии функций Windows API, которые принимают char
строки.