【问题标题】:cannot convert parameter 1 from 'char' to 'LPCWSTR'无法将参数 1 从“char”转换为“LPCWSTR”
【发布时间】:2010-10-13 14:45:55
【问题描述】:

我不断收到此错误: cannot convert parameter 1 from 'char' to 'LPCWSTR'

int main(int argc, char argv[])    
{

   // open port for I/O
   HANDLE h = CreateFile(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

   if(h == INVALID_HANDLE_VALUE) {
       PrintError("E012_Failed to open port");

有人可以帮忙吗?

【问题讨论】:

    标签: c++ windows createfile lpcwstr


    【解决方案1】:

    转到项目的属性并在配置属性/常规下,将字符集更改为“未设置”。这样,编译器就不会假定您需要默认选择的 Unicode 字符:

    【讨论】:

      【解决方案2】:

      应该是

      int main(int argc, char* argv[]) 
      

      HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
      

      【讨论】:

      • 我不认为使用 ANSI 版本的 CreateFile 是正确的方法,接下来你知道他将开始更改所有函数调用以使用 ANSI 版本。
      • @Nikola:当然是错误的方式!我只是觉得向一个绝对的初学者解释char、wchat_t、TCHAR之间的区别以及如何编写正确的unicode应用程序是不合适的。
      【解决方案3】:

      这是 Visual Studio 默认创建的主要函数:

      int _tmain(int argc, _TCHAR* argv[])
      

      其中 _TCHAR 定义为 char 或 wchar_t 取决于是否定义了 _UNICODE。 API 函数也会发生同样的事情。我建议您不要使用显式 CreateFileA。更改您的主文件并使用 CreateFile。

      【讨论】:

        【解决方案4】:

        根据CharacterSet 的编译器设置,您可能需要执行多字节/宽字符转换,或者如果您不在乎 CharacterSet 是什么,则更改它。

        关于使用 MultiByteToWideChar 进行转换,请参见以下内容...

        http://www.codeguru.com/forum/showthread.php?t=231165

        【讨论】:

          【解决方案5】:

          我猜你是在启用 Unicode 的情况下进行编译。然后使用char argv[]argvchar 数组,所以argv[1]char,而CreateFile 想要const wchar_t* 作为第一个参数,而不是char

          也就是说,你的main 定义也有问题,它应该有char* argv[]。通过该更改,您可以致电CreateFileA

          【讨论】:

            猜你喜欢
            • 2011-07-25
            • 2016-07-06
            • 1970-01-01
            • 2011-07-25
            • 1970-01-01
            • 1970-01-01
            • 2018-06-08
            • 1970-01-01
            • 2020-04-04
            相关资源
            最近更新 更多