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?
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
auxDIBImageLoad
auxDIBImageLoadA
- 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.
vous avez quelques options:
- changez l'option 'character set' dans les paramètres de votre projet de 'Unicode' à 'Not Set'
- Appel
auxDIBImageLoadA
au lieu deauxDIBImageLoad
- Modifier
Filename
typechar*
wchar_t*
- Utiliser
std::mbstowcs
pour convertir le nom de fichier d'unchar*
wchar_t*
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'.
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);
...
}