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
auxDIBImageLoadauxDIBImageLoadA - modifier
LoadBMPfonction 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
auxDIBImageLoadAau lieu deauxDIBImageLoad - Modifier
Filenametypechar*wchar_t* - Utiliser
std::mbstowcspour 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);
...
}