首页 文章

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

提问于
浏览
4

我在这里找到的代码工作了'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 回答

  • 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构建模式 .

    实际上,没有公开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
    

    并选择 "Use Multi-Byte Character Set" ,如以下屏幕截图所示:

    Setting Multi-Byte Character Set in VS2010 IDE

  • 1

    您在Visual Studio中的设置可能设置为Unicode,但您编译的代码需要ASCII .

    转到项目属性 - >配置属性 - >常规 - >字符集,然后选择“使用多字节字符集” .

    -Surenthar

  • 2

    您在Visual Studio中的设置可能设置为Unicode,但您编译的代码需要ASCII .

    转到项目属性 - >配置属性 - >常规 - >字符集,然后选择“使用多字节字符集” .

    您还应该从C - >预处理器 - >预处理器定义中删除 UNICODE_UNICODE (如果在那里定义它们) .

    这将使您的代码调用Windows API函数的ASCII版本,它接受 char 字符串 .

相关问题