Visual Studio 2010 Arduino cpp Ошибка: аргумент типа & quot; char * & quot; несовместим с параметром типа «LPCWSTR»;

Я пытаюсь настроить arduino uno для связи через последовательный порт с программой на C ++ в visual studio 2010. Я работаю с кодом, найденным здесь: http://playground.arduino.cc/Interfacing/CPPWindows

К сожалению, файл .cpp выдает мне следующее сообщение для строки 9 для переменной ‘portName’:

Ошибка: аргумент типа «char *» несовместим с параметром типа «LPCWSTR»

Я не понимаю это сообщение об ошибке, и попытался несколько разных вещей, чтобы исправить это. Любая помощь будет принята с благодарностью!

4

Решение

Учитывая код ссылки в вашем вопросе, кажется, проблема здесь:

Serial::Serial(char *portName)
{
...

this->hSerial = CreateFile(portName,  // <--- ERROR

CreateFile Win32 API, который ожидает LPCTSTR как первый строковый параметр .

LPCTSTR является Win32 typedef, который расширен до:

  • const char* в сборках ANSI / MBCS
  • const 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

и выберите «Использовать многобайтовый набор символов», как показано на следующем скриншоте:

Настройка многобайтовой кодировки в IDE VS2010

10

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

Ваши настройки в Visual Studio, вероятно, установлены на Unicode, но код, который вы компилируете, ожидает ASCII.

Перейдите в Свойства проекта -> Свойства конфигурации -> Общие -> Набор символов и выберите «Использовать многобайтовый набор символов».

-Surenthar

2

Ваши настройки в Visual Studio, вероятно, установлены на Unicode, но код, который вы компилируете, ожидает ASCII.

Перейдите в Свойства проекта -> Свойства конфигурации -> Общие -> Набор символов и выберите «Использовать многобайтовый набор символов».

Вы также должны удалить UNICODE или же _UNICODE из C ++ -> Preprocessor -> Определения препроцессора, если они там определены.

Это заставит ваш код вызывать ASCII-версии функций Windows API, которые принимают char строки.

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