ne peut pas convertir le paramètre 1 de "char *" en "LPCWSTR"

J'essaie de charger un fichier BMP

AUX_RGBImageRec *LoadBMP(char *Filename)  // Loads A Bitmap Image
{
    FILE *File=NULL;                      // File Handle

    if (!Filename)                        // Make Sure A Filename Was Given
    {
        return NULL;                      // If Not Return NULL
    }

    File=fopen(Filename,"r");             // Check To See If The File Exists

    if (File)                             // Does The File Exist?
    {
        fclose(File);                     // Close The Handle
        return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
    }

    return NULL;                          // If Load Failed Return NULL
}

cela vient d'un exemple mais je reçois maintenant l'erreur

error C2664: 'auxDIBImageLoadW' : impossible de convertir le paramètre 1 de 'char *' to 'LPCWSTR'

comment pourrais-je corriger cela?

17
demandé sur genpfault 2011-03-30 04:32:28

5 réponses

vous compilez votre application avec un jeu de caractères UNICODE (paramètres du Projet -> Options de Configuration -> Général). Les fichiers d'en-tête de Windows utilisent #definit pour "mapper" les noms de fonction à nameA (pour les chaînes multi octets) ou nameW (pour les chaînes unicode).

cela signifie Que quelque part dans un fichier d'en-tête, il y aura un #define comme ceci

#define auxDIBImageLoad auxDIBImageLoadW

donc vous n'appelez pas vraiment auxDIBImageLoad (il n'y a pas de fonction de même nom), vous appelez auxDIBImageLoadW. Et auxDIBImageLoadW attend une chaîne unicode (wchar_t const*). Vous passez une chaîne de caractères de plusieurs octets (char const*).

Vous pouvez effectuer l'une des opérations suivantes

  • modifier votre projet pour utiliser le jeu de caractères multi-octets (- >paramètres du projet)
  • appeler explicitement la version multi-octets de la fonction en remplaçant auxDIBImageLoadauxDIBImageLoadA
  • modifier LoadBMP fonction pour accepter une chaîne unicode elle-même
  • convertissez la chaîne en unicode à l'intérieur LoadBMP

je recommande de changer l'un ou l'autre LoadBMP pour accepter une chaîne unicode lui-même ou en appelant auxDIBImageLoadA directement (dans cet ordre). Changer les paramètres du projet pourrait être OK si cela ne casse pas beaucoup d'autres codes. Je voudrais suggérez de convertir la chaîne, puisque c'est inutile. Appel de auxDIBImageLoadA directement est beaucoup plus facile, et le résultat est le même.

33
répondu Paul Groke 2012-11-01 01:19:34

vous avez quelques options:

  • changez l'option 'character set' dans les paramètres de votre projet de 'Unicode' à 'Not Set'
  • Appel auxDIBImageLoadA au lieu de auxDIBImageLoad
  • Modifier Filenametype char*wchar_t*
  • Utiliser std::mbstowcs pour convertir le nom de fichier d'un char*wchar_t*
10
répondu ildjarn 2015-02-11 13:46:06

Ressemble au votre, essayez d'utiliser deux jeux de caractères différents. 'char ' est l'ANSI typique et LPCWSTR est le caractère large (i.e. unicode). Si vous souhaitez utiliser char changez la propriété' Character Set 'dans votre paramètre de projet en'No Set'.

1
répondu skimobear 2011-03-30 00:46:07

Essayez d'utiliser MultiByteToWideChar () la façon suivante:

void main(int argc, char* argv[])
{
 ...
 wchar_t filename[4096] = {0};
 MultiByteToWideChar(0, 0, argv[1], strlen(argv[1]), filename, strlen(argv[1]));

 // RenderFile() requires LPCWSTR (or wchar_t*, respectively)
 hr = pGraph->RenderFile(filename, NULL);
 ...
}
1
répondu Slavy Mihov 2013-10-23 02:57:34

convertissez le tableau de caractères en LPCWSTR. Vous pouvez voir cela dans le 2ème gars de la poste ici

0
répondu Cole W 2011-03-30 00:49:12