• 5432阅读
  • 2回复

qt程序中调用windows的API的问题。 [复制链接]

上一主题 下一主题
离线zhuhehz
 

只看楼主 正序阅读 楼主  发表于: 2010-11-03
— 本帖被 XChinux 执行加亮操作(2010-11-04) —
我打算打开串口1,调用CreateFile函数,如下:
HANDLE hCom;
   hCom=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);

但是编译出错:error: cannot convert 'const char*' to 'const WCHAR*' for argument '1' to 'void* CreateFileW(const WCHAR*, DWORD, DWORD, _SECURITY_ATTRIBUTES*, DWORD, DWORD, void*)'

也就是如何将“COM1”这个char指针转换为WCHAR*的类型。

有个笨办法:WCHAR a[15];
        a[0] = 'C';
        a[1] = 'O';
        a[2] = 'M';
        a[3] = '1';
把“COM1”改为a,编译就通过了。
请问大家,有什么好办法吗?谢了!
[ 此帖被zhuhehz在2010-11-03 15:56重新编辑 ]
离线dbzhang800

只看该作者 2楼 发表于: 2010-11-03
如果想写 "COM1" 就直接用 CreateFileA
如果想写 L"COM1" 就直接用 CreateFileW

如果想折腾,还有非常多种可以工作的写法...
离线zhuhehz

只看该作者 1楼 发表于: 2010-11-03
我上网查了一下,可以这样,利用 MultiByteToWideChar()来实现
hr2wch(const char* buffer, wchar_t* wBuf)
{
      size_t len = strlen(buffer);

      size_t wlen = MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), NULL, 0);

      wBuf = new wchar_t[wlen + 1];

      MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), wBuf, int(wlen));
}
编译是通过了,还没有实际运行一下。等高手。
快速回复
限100 字节
 
上一个 下一个