Visual Studio 2010 Arduino cpp错误:类型“char *”的参数与“LPCWSTR”类型的参数不兼容

时间:2015-06-12 14:31:36

标签: c++ visual-studio arduino tchar lpcwstr

我正在尝试使用Visual Studio 2010中的C ++程序建立一个用于串口通信的arduino uno。我正在使用此处的代码:http://playground.arduino.cc/Interfacing/CPPWindows

不幸的是,.cpp文件为变量'portName'的第9行提供了以下消息:

错误:类型“char *”的参数与“LPCWSTR”类型的参数不兼容

我不明白这个错误信息,并尝试了一些不同的东西来解决它。任何帮助将不胜感激!

3 个答案:

答案 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,扩展为:

    ANSI / MBCS版本中的
  • const char*
  • Unicode构建中的
  • const wchar_t*(自VS2005以来一直是默认值)

由于您使用的是VS2010,因此您可能处于默认的Unicode构建模式。

实际上,没有&#34;物理&#34;公开了CreateFile API,但有两个不同的功能:CreateFileACreateFileW。前者采用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; ,如以下屏幕截图所示:

Setting Multi-Byte Character Set in VS2010 IDE

答案 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字符串。