我收到这个错误
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
宏在它们之间进行选择,这将使非后缀函数使用宽字符函数,否则(如果未定义宏)窄字符函数使用函数。
有两种方法可以解决您的问题:
- 明确使用宽字符函数
GetDriveTypeW
;或者 - 定义
UNICODE
宏以强制所有 Windows API 函数使用宽字符函数。
如果您只使用几个宽字符函数,请使用第一个解决方案(显式使用宽字符函数),否则定义宏(解决方案 2)会更简单。
关于c++ - UINT GetDriveTypeA(LPCSTR )': cannot convert argument 1 from ' LPCWSTR' 到 'LPCSTR' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823179/