31

我不断收到此错误: 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");

有人可以帮忙吗?

4

5 回答 5

123

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

替代文字

于 2010-10-13T14:58:40.160 回答
6

它应该是

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

HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
于 2010-10-13T14:51:33.513 回答
5

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

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

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

于 2010-10-13T14:59:33.420 回答
2

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

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

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

于 2010-10-13T15:08:34.367 回答
0

我猜你是在启用 Unicode 的情况下编译的。然后 with char argv[],argv是一个char数组,argv[1]a 也是一个数组,char并且CreateFile想要 aconst wchar_t*作为第一个参数,而不是 a char

也就是说,你的main定义也被打破了,它应该有char* argv[]. 通过该更改,您可以调用CreateFileA.

于 2010-10-13T14:54:48.563 回答