我收到了这个错误
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);
}
}
} 发布于 2019-04-24 05:55:14
在Windows上,几乎所有函数都有两个版本: ASCII版本,它使用“普通”窄字符字符串,它们有所有A后缀(如GetDriveTypeA);宽字符"Unicode“函数,由它们的W后缀标识。
您可以通过定义UNICODE宏在它们之间进行选择,这将使非后缀函数使用宽字符函数,否则(如果未定义宏)则使用窄字符函数。
解决问题的方法有两种:
GetDriveTypeW;或UNICODE宏以强制所有Windows函数使用宽字符函数.如果您只使用几个宽字符函数,那么使用第一个解决方案(显式使用宽字符函数),否则定义宏(解决方案2)可能会更简单。
发布于 2019-04-24 05:54:55
您正在使用多字节字符集并传递wchar_t*作为参数。以下代码应该有效:
LPCSTR driveType = (const char*) driveLetter.utf16(); https://stackoverflow.com/questions/55823179
复制相似问题