2017-05-10 3 views
-1

Je erreurs à la compilation avec la ligne au fondComment utiliser FindFirstFile

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

Le compilateur ne cesse de lancer error C2664 back at me, : cannot convert argument 1 from 'const char *' to 'LPCWSTR'

Comment puis-je créer un LPCWSTR à un std :: string pour passer à en FindFirstFile?

La section de code est pour référence.

Le code actuel suit ci-dessous.

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); 
+2

Utilise wstring au lieu de chaîne –

Répondre

2

Les types de données WinAPI sont de très courtes abréviations. LPCWSTR est l'abréviation de:

Long 
Pointer to the start of 
Const 
Wide 
STRing 

En tant que tel il est un pointeur (pointeurs longs sont l'histoire) au premier caractère d'une chaîne const large (const wchar_t*), ce qui signifie que vous devez utiliser std::wstring::c_str() au lieu de std::string::c_str().

Note latérale: assurez-vous simplement de #define UNICODE partout où vous utilisez le WinAPI, sinon vous obtiendrez d'autres erreurs à propos de la conversion en LPCSTR. Vous pouvez également utiliser explicitement les versions W des fonctions WinAPI lorsqu'elles existent.