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

时间:2019-04-24 05:50:29

标签: c++ qt

我收到此错误

  

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

下面是我的代码。

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);    
        }    
    }    
}   

2 个答案:

答案 0 :(得分:2)

在Windows上,几乎所有功能都有两个版本:ASCII版本,它使用“常规”窄字符字符串,并且它们具有所有的A后缀(如GetDriveTypeA);还有宽字符的“ Unicode”功能,由后缀W标识。

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

有两种方法可以解决您的问题:

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

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

答案 1 :(得分:0)

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

  LPCSTR driveType =  (const char*) driveLetter.utf16();