我收到此错误
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);
}
}
}
答案 0 :(得分:2)
在Windows上,几乎所有功能都有两个版本:ASCII版本,它使用“常规”窄字符字符串,并且它们具有所有的A
后缀(如GetDriveTypeA
);还有宽字符的“ Unicode”功能,由后缀W
标识。
您可以通过定义UNICODE
宏在它们之间进行选择,这将使不带后缀的函数使用宽字符函数,否则(如果未定义宏)则使用窄字符函数
有两种方法可以解决您的问题:
GetDriveTypeW
;或者UNICODE
宏,以强制所有Windows API函数使用宽字符函数。如果仅使用几个宽字符函数,则使用第一个解决方案(显式使用宽字符函数),否则定义宏可能会更简单(解决方案2)。
答案 1 :(得分:0)
您正在使用多字节字符集,并将wchar_t *作为参数传递。 以下代码应该可以工作:
LPCSTR driveType = (const char*) driveLetter.utf16();