UINT GetDriveTypeA (LPCSTR) ': невозможно преобразовать аргумент 1 из LPCWSTR в LPCSTR? - PullRequest
0 голосов
/ 24 апреля 2019

Я получаю эту ошибку

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);    
        }    
    }    
}   

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

В Windows есть две версии почти для всех функций: версия ASCII, которая принимает «нормальные» строки с узкими символами и имеет весь суффикс A (как в GetDriveTypeA);И функции широких символов «Юникод», которые идентифицируются по суффиксу W.

Вы можете выбирать между ними, задав макрос UNICODE, который заставит функции без суффикса использовать широкий-символы функций, в противном случае (если макрос не определен) используются узкосимвольные функции.

Есть два способа решения вашей проблемы:

  1. Использование широкогосимвольная функция GetDriveTypeW явно;Или
  2. Определите макрос UNICODE, чтобы заставить все функции Windows API использовать функции широких символов.

Если вы используете только несколько функций широких символов, перейдитес первым решением (явно использующим функции широких символов), в противном случае было бы проще определить макрос (решение 2).

0 голосов
/ 24 апреля 2019

Вы используете многобайтовый набор символов и передаете wchar_t * в качестве аргумента. Следующий код должен работать:

  LPCSTR driveType =  (const char*) driveLetter.utf16();   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...