我正在尝试使用Visual Studio 2010中的C ++程序建立一个用于串口通信的arduino uno。我正在使用此处的代码:http://playground.arduino.cc/Interfacing/CPPWindows
不幸的是,.cpp文件为变量'portName'的第9行提供了以下消息:
错误:类型“char *”的参数与“LPCWSTR”类型的参数不兼容
我不明白这个错误信息,并尝试了一些不同的东西来解决它。任何帮助将不胜感激!
答案 0 :(得分:10)
鉴于您的问题中的代码链接,问题似乎在这里:
Serial::Serial(char *portName) { ... this->hSerial = CreateFile(portName, // <--- ERROR
CreateFile
is a Win32 API that expects an LPCTSTR
as first string parameter。
LPCTSTR
是一个Win32 typedef,扩展为:
const char*
const wchar_t*
(自VS2005以来一直是默认值)由于您使用的是VS2010,因此您可能处于默认的Unicode构建模式。
实际上,没有&#34;物理&#34;公开了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*
的版本),与Visual Studio中的实际ANSI / MBCS / Unicode设置无关。
另一种选择是将当前的构建设置从默认的Unicode模式更改为ANSI / MBCS。为此,您可以按照以下路径进行操作:
Project Properties | Configuration Properties | General | Character Set
并选择&#34;使用多字节字符集&#34; ,如以下屏幕截图所示:
答案 1 :(得分:2)
您在Visual Studio中的设置可能设置为Unicode,但您编译的代码需要ASCII。
转到项目属性 - &gt;配置属性 - &gt;一般 - &gt;字符集并选择&#34;使用多字节字符集&#34;。
-Surenthar
答案 2 :(得分:1)
您在Visual Studio中的设置可能设置为Unicode,但您编译的代码需要ASCII。
转到项目属性 - &gt;配置属性 - &gt;一般 - &gt;字符集并选择“使用多字节字符集”。
您还应该从C ++中移除UNICODE
或_UNICODE
- &gt;预处理器 - &gt;预处理器定义,如果在那里定义的话。
这将使您的代码调用Windows API函数的ASCII版本,这些函数接受char
字符串。