X__*_*X__ 4 c++ arduino tchar visual-studio lpcwstr
我正在尝试使用Visual Studio 2010中的C++程序建立一个用于串口通信的arduino uno.我正在使用此处找到的代码:http://playground.arduino.cc/Interfacing/CPPWindows
不幸的是,.cpp文件为变量'portName'的第9行提供了以下消息:
错误:类型"char*"的参数与"LPCWSTR"类型的参数不兼容
我不明白这个错误信息,并尝试了一些不同的东西来解决它.任何帮助将不胜感激!
Mr.*_*C64 10
鉴于您的问题中的代码链接,似乎问题在于:
Run Code Online (Sandbox Code Playgroud)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*输入字符串,后者采用a const wchar_t*.
在Unicode构建中,CreateFile是一个扩展到的预处理器宏CreateFileW; 在ANSI/MBCS构建中,CreateFile扩展为CreateFileA.
因此,如果您处于Unicode构建模式,则CreateFile调用将扩展为CreateFileW(const wchar_t*, ...).由于portName定义为a char*,因此在wchar_t*和之间存在不匹配char*,并且您会收到编译器错误.
要解决这个问题,你有一些选择.
例如,您可以在代码中明确表示,而只是调用CreateFileA()而不是CreateFile().这样,您将使用该函数的ANSI/MBCS版本(即,采用a的版本const char*),独立于Visual Studio中的实际ANSI/MBCS/Unicode设置.
另一种选择是将当前的构建设置从默认的Unicode模式更改为ANSI/MBCS.为此,您可以按照以下路径:
Project Properties | Configuration Properties | General | Character Set
Run Code Online (Sandbox Code Playgroud)
并选择"使用多字节字符集",如以下屏幕截图所示:

| 归档时间: |
|
| 查看次数: |
5458 次 |
| 最近记录: |