IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Impossible de convertir le paramètre 1 de 'const char *' en 'LPCWSTR'


Sujet :

Visual C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Impossible de convertir le paramètre 1 de 'const char *' en 'LPCWSTR'
    Bonjour,

    J'ai essayé d'utiliser Qt avec Visual Studio. J'ai une fonction de trouver toutes les images dans un directory. ça marche bien comme un "console project", mais quand j'ai créé le Qt projet, j'ai des fautes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    1>.\Utils.cpp(38) : error C2664: 'FindFirstFileW' : impossible de convertir le paramètre 1 de 'const char *' en 'LPCWSTR'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\Utils.cpp(44) : error C2664: 'strlen' : impossible de convertir le paramètre 1 de 'WCHAR [260]' en 'const char *'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\Utils.cpp(44) : error C2664: 'CheckExtension' : impossible de convertir le paramètre 1 de 'WCHAR [260]' en 'const char *'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\Utils.cpp(60) : error C2664: 'FindFirstFileW' : impossible de convertir le paramètre 1 de 'const char *' en 'LPCWSTR'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\Utils.cpp(66) : error C2664: 'strlen' : impossible de convertir le paramètre 1 de 'WCHAR [260]' en 'const char *'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\Utils.cpp(66) : error C2664: 'CheckExtension' : impossible de convertir le paramètre 1 de 'WCHAR [260]' en 'const char *'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>.\Utils.cpp(68) : error C2664: 'strcpy' : impossible de convertir le paramètre 2 de 'WCHAR [260]' en 'const char *'
    1>        Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    voilà les fonctions qui introduitent les problèmes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    bool FindImagesInDirectory(const char *szDirectoryPath, char ***pszImgPaths, int *piNbImg)
    {
        int                    i;
        HANDLE                hFind;
        WIN32_FIND_DATA        data;
     
        // Initialize piNbImg
        *piNbImg    =    0;
     
        // Looking for the first file of the directory
        if( (hFind = FindFirstFile(szDirectoryPath, &data))== INVALID_HANDLE_VALUE )
            return false;
     
        // Count the number of valid file
        do   
        {
            if( CheckExtension(data.cFileName, (int)strlen(data.cFileName) ) != 0)
                *piNbImg+=1;
        }
        while(FindNextFile(hFind, &data));
     
        // Close the file
        FindClose(hFind);
     
        // If no file found => return ture
        if(*piNbImg == 0)
            return true;
     
        // Allocation of pszImgFilePaths;
        Alloc2DMem(pszImgPaths,*piNbImg);
     
        // Looking for the first file of the directory
        if( (hFind = FindFirstFile(szDirectoryPath, &data)) == INVALID_HANDLE_VALUE)
            return false;
     
        // Store all the valid images into pszImgFilePaths
        i=0;
        do{
            if( CheckExtension(data.cFileName, (int)strlen(data.cFileName)) != 0 )
            {
                strcpy((*pszImgPaths)[i],data.cFileName);
                i++;
            }
        } while(FindNextFile(hFind, &data));
     
        FindClose(hFind);
     
        return true;
    }
     
    int CheckExtension(const char *szFileName, int iLenght)
    {
        const char *P=szFileName;
        while(*P!='\0')
            P++;                        //End of string
     
        if((int)(P-szFileName) > iLenght)        //No '\0' in the string
            return 0;
     
        while(*P!='.')    P--; P++;                    //Search for a dot
     
        if((int)(P-szFileName)<0)return 0;        //if no dot
     
     
        if(strcmp(P,"jpg")==0 || strcmp(P,"JPG")==0 )
            return 1;
        else
            if(strcmp(P,"bmp")==0 || strcmp(P,"BMP")==0 )
                return 1;
            else
                if(strcmp(P,"tiff")==0|| strcmp(P,"TIFF")==0 ||strcmp(P,"tif")==0 || strcmp(P,"TIF")==0)
                    return 1;
                else
                    if(strcmp(P,"png")==0 || strcmp(P,"PNG")==0 )
                        return 1;
                    else
                        if(strcmp(P,"j2k")==0 || strcmp(P,"J2K")==0 )
                            return 1;
                        else
                            if(strcmp(P,"gif")==0 || strcmp(P,"GIF")==0 )
                                return 1;
                            else
                                if(strcmp(P,"WAV")==0 || strcmp(P,"wav")==0 )
                                    return 1;
        return 0;
    }
    De plus j'ai essayé les deux " character set" :MBCS et Unicode , mais toujours marche pas......

    Je vous remercie pour votre aides!!!
    Xiaoming

  2. #2
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    L'erreur est pourtant explicite : les types que tu passes en paramètre ne sont pas les bons !

    => procède à un cast ou une conversion lors (ou avant) chaque appel qui pose problème.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 394
    Points : 5 005
    Points
    5 005
    Par défaut
    LPCWSTR comme son nom l'indique est une chaine unicode, avec des caractères dont la taille est supérieure à celle d'un char.

    regarde du coté de la fonction MultiByteToWideChar : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/02/2010, 15h22
  2. Réponses: 20
    Dernier message: 08/12/2009, 20h42
  3. Réponses: 2
    Dernier message: 29/12/2008, 18h49
  4. Réponses: 1
    Dernier message: 09/07/2008, 15h54
  5. Réponses: 1
    Dernier message: 10/08/2007, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo