首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UINT GetDriveTypeA(LPCSTR):不能将参数1从“LPCWSTR”转换为“LPCSTR”吗?

UINT GetDriveTypeA(LPCSTR):不能将参数1从“LPCWSTR”转换为“LPCSTR”吗?
EN

Stack Overflow用户
提问于 2019-04-24 05:50:29
回答 2查看 895关注 0票数 0

我收到了这个错误

UINT GetDriveTypeA(LPCSTR):无法将参数1从“LPCWSTR”转换为“LPCSTR”

下面是我的密码。

代码语言:javascript
复制
void USBDrives::add()    
{    
    QDir driveList;    
    for(QFileInfo drive : driveList.drives())    
    {   
        QString driveLetter = drive.absoluteFilePath();   
        LPCWSTR driveType =  (const wchar_t*) driveLetter.utf16();   
        if(GetDriveType(driveType) == 2)   
        {    
            emit sendUSBDriveLetter(driveLetter);    
        }    
    }    
}   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-24 05:55:14

在Windows上,几乎所有函数都有两个版本: ASCII版本,它使用“普通”窄字符字符串,它们有所有A后缀(如GetDriveTypeA);宽字符"Unicode“函数,由它们的W后缀标识。

您可以通过定义UNICODE宏在它们之间进行选择,这将使非后缀函数使用宽字符函数,否则(如果未定义宏)则使用窄字符函数。

解决问题的方法有两种:

  1. 显式使用宽字符函数GetDriveTypeW;或
  2. 定义UNICODE宏以强制所有Windows函数使用宽字符函数.

如果您只使用几个宽字符函数,那么使用第一个解决方案(显式使用宽字符函数),否则定义宏(解决方案2)可能会更简单。

票数 2
EN

Stack Overflow用户

发布于 2019-04-24 05:54:55

您正在使用多字节字符集并传递wchar_t*作为参数。以下代码应该有效:

代码语言:javascript
复制
  LPCSTR driveType =  (const char*) driveLetter.utf16();   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55823179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档