首页 > 解决方案 > UINT GetDriveTypeA(LPCSTR)':无法将参数 1 从 'LPCWSTR' 转换为 'LPCSTR'?

问题描述

我收到此错误

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

标签: c++qt

解决方案


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

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

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

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

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


推荐阅读