c++ - 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);
}
}
}
解决方案
在 Windows 上,几乎所有函数都有两个版本: ASCII 版本,它采用“普通”窄字符字符串,并且它们具有所有A
后缀(如GetDriveTypeA
);以及由W
后缀标识的宽字符“Unicode”函数。
您可以通过定义UNICODE
宏在它们之间进行选择,这将使不带后缀的函数使用宽字符函数,否则(如果未定义宏)使用窄字符函数。
有两种方法可以解决您的问题:
- 显式使用宽字符函数
GetDriveTypeW
;或者 - 定义
UNICODE
宏以强制所有 Windows API 函数使用宽字符函数。
如果您只使用几个宽字符函数,请使用第一个解决方案(显式使用宽字符函数),否则定义宏可能更简单(解决方案 2)。
推荐阅读
- php - 在随机文本中的某些单词之前添加中断?
- python - 使用 keras 计算每个时期的 Fscore(不是批量)
- html - 如何缩放徽标块以完全适合导航栏?
- json - 有没有办法将数据从 json 文件导入 sqlite,其中表列名称与 json 文件中的键值不同?
- python - Tkinter 进入多个验证
- sql - PostgreSQL 在 date1 和 date2 之间选择日期
- css - angular/ng-bootstrap/css 如何防止将前 100px 用于任何显示,但设置为固定顶部的标题?
- r - 如何在 R 中为图形的背景部分着色以指示感兴趣的时间段
- ruby-on-rails - 通过一个控制器操作为两个模型创建 Rails 对象
- database - 问:具有一对多关系的多对多表