我在这里找到的代码工作了'm trying to set up an arduino uno for serial port communication with a C++ program in visual studio 2010. I':http://playground.arduino.cc/Interfacing/CPPWindows
不幸的是,.cpp文件为变量'portName'的第9行提供了以下消息:
错误:类型“char *”的参数与“LPCWSTR”类型的参数不兼容
我不明白这个错误信息,并尝试了一些不同的东西来解决它 . 任何帮助将不胜感激!
3 回答
鉴于您的问题中的代码链接,似乎问题在于:
this-> hSerial = CreateFile(portName,// <--- ERROR
CreateFile is a Win32 API that expects an LPCTSTR as first string parameter .
LPCTSTR
是Win32 typedef,扩展为:ANSI / MBCS构建中的
const char*
Unicode版本中的
const wchar_t*
(自VS2005以来一直是默认版本)由于您使用的是VS2010,因此您可能处于默认的Unicode构建模式 .
实际上,没有公开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*
的版本),独立于Visual Studio中的实际ANSI / MBCS / Unicode设置 .另一种选择是将当前的构建设置从默认的Unicode模式更改为ANSI / MBCS . 为此,您可以按照以下路径:
并选择 "Use Multi-Byte Character Set" ,如以下屏幕截图所示:
您在Visual Studio中的设置可能设置为Unicode,但您编译的代码需要ASCII .
转到项目属性 - >配置属性 - >常规 - >字符集,然后选择“使用多字节字符集” .
-Surenthar
您在Visual Studio中的设置可能设置为Unicode,但您编译的代码需要ASCII .
转到项目属性 - >配置属性 - >常规 - >字符集,然后选择“使用多字节字符集” .
您还应该从C - >预处理器 - >预处理器定义中删除
UNICODE
或_UNICODE
(如果在那里定义它们) .这将使您的代码调用Windows API函数的ASCII版本,它接受
char
字符串 .