Как использовать FindFirstFile

Я продолжаю получать ошибки компиляции со строкой внизу

hFind = FindFirstFile(fileFilter.c_str()), &FindFileData); 

Компилятор продолжает бросать error C2664 back at me, : cannot convert argument 1 from 'const char *' to 'LPCWSTR'

Как создать LPCWSTR для std::string для передачи в FindFirstFile?

Же раздел кода для справки.

Фактический код приведен ниже.

using namespace std;

void GetFileListing(string directory, string fileFilter, bool recursively = true)    
{    
    if (recursively)
        GetFileListing(directory, fileFilter, false);

    directory += "\\";
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind ;
    string filter = directory + (recursively ? "*" : fileFilter);
    string Full_Name;
    string Part_Name;

// the line causing the compile error

    hFind = FindFirstFile(fileFilter.c_str()), &FindFileData);

1 ответ

Типы данных WinAPI - прекрасные короткие сокращения. LPCWSTR это сокращение от:

Long
Pointer to the start of
Const
Wide
STRing

Таким образом, это указатель (длинные указатели являются историей) на первый символ строки const wide (const wchar_t*), то есть вы должны использовать std::wstring::c_str() вместо std::string::c_str(),

Примечание: просто обязательно #define UNICODE везде, где вы используете WinAPI, в противном случае вы получите другие ошибки о преобразовании в LPCSTR, В качестве альтернативы, явно используйте W версии функций WinAPI, где они существуют.

Другие вопросы по тегам