c++ - UINT GetDriveTypeA(LPCSTR )': cannot convert argument 1 from ' LPCWSTR' 到 'LPCSTR' ?

标签 c++ qt

我收到这个错误

UINT GetDriveTypeA(LPCSTR)': cannot convert argument 1 from 'LPCWSTR' to '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);    
        }    
    }    
}   

最佳答案

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

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

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

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

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

关于c++ - UINT GetDriveTypeA(LPCSTR )': cannot convert argument 1 from ' LPCWSTR' 到 'LPCSTR' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823179/

相关文章:

Qt 拖放 QListView 删除释放它的项目

c++ - glBlitFramebuffer 与 QOpenGLFunctions

c++ - 我可以使用我的部分数据作为锁吗?

c++ - 重载 I/O 流运算符和前/后递增/递减运算符错误?

c++ - 1 valgrind 的无效读取大小

c++ - Qt QSpinbox 和 QPushButton 到 Arduino

c++ - 如何为可编辑的 QComboBox 覆盖 KeyPressEvent?

c++ - 如何在 QPainter 上获取渲染文本的大小?

c++ - 页面未在此范围内声明 - qt creator - PoDoFo

C++ NCurses 如何获取当前光标位置?