Comment puis-je résoudre cette erreur?
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
char* file="d:/tester";
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(file, &FindFileData); //line of error says argument of type char* is incompatible with parameter of type LPCWSTR
}
Je ne comprends pas l'erreur.Quel est-il et comment puis-je résoudre l'erreur ?
Je fais une application console et que vous devez vérifier si les fichiers sont là dans le répertoire .
Avez-vous essayé
T-il vous donner l'erreur sans l'aide de la référence? (fichier, FindFileData)
iammilind Oui, il fonctionne après la coulée comme ceci :
Êtes-vous sérieux au sujet de la coulée d'un
des années en arrière, quand j'étais à l'apprentissage de VC++ GUI, j'ai vu un tel casting dans de nombreux articles. En fait c'est la manière de ce qui se passait. Je ne me souviens plus où j'ai vu ça. Mais c'était sans danger.
(LPCWSTR)(&FindFileData)
(en tout ou cast de style C++)?T-il vous donner l'erreur sans l'aide de la référence? (fichier, FindFileData)
iammilind Oui, il fonctionne après la coulée comme ceci :
(LPCWSTR)file
Mais qu'est-ce que LPCWSTRÊtes-vous sérieux au sujet de la coulée d'un
char*
en LPCWSTR
?des années en arrière, quand j'étais à l'apprentissage de VC++ GUI, j'ai vu un tel casting dans de nombreux articles. En fait c'est la manière de ce qui se passait. Je ne me souviens plus où j'ai vu ça. Mais c'était sans danger.
OriginalL'auteur Suhail Gupta | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
Vous appelez la fonction qui attend une chaîne de caractères larges (
FindFirstFileW
). Vous pouvez soit modifier le fichier à utiliserwchar_t* file = L"d:\\tester";
ou utiliser une version ASCII de la fonctionFindFirstFileA
.Lorsque Windows ajout du support de l'Unicode, ils ont décidé de créer deux versions pour de nombreuses fonctions avec W et Un à la fin, de sorte que le nom de la fonction est mappé à l'un d'eux en fonction de l'Unicode des paramètres.
OriginalL'auteur Gene Bushuyev
le type
LPCWSTR
est un const pointeur à l'échelle de charla
file
danschar* file="d:/tester";
est un pointeur vers un char ordinaireOrdinaire char utilise généralement 1 octet de mémoire, alors que l'échelle de char habituellement utilise 2 octets. Ce qui va se passer si le nom de fichier contient des cyrillique ou japonais lettres? Vous ne serez pas en mesure d'ouvrir sans spécifier l'encodage. API de Windows accepte l'échelle de caractères à
FindFirstFile
fonction, parce que nom de fichier peut être en unicode. Ainsi, si vous écrivezL"foo_bar"
le compilateur va l'interpréter comme de la chaîne de caractères larges. Par conséquent, vous pouvez écrirewchar_t* file = L"d:\\tester";
pour correspondre à des types de paramètres, de sorte que la compilation sera couronnée de succès.OriginalL'auteur rmflow
Vous compilez avec UNICODE définie et pourtant, en passant d'une chaîne ANSI que votre premier paramètre. Remplacer votre ligne que les êtres char * avec
TCHAR *fichier=TEXT("d:\tester");
et les choses doivent être très fines.
Martyn
Vous devez comprendre plus sur le fonctionnement de l'API Windows fonctionne avec Unicode. Il y a un bon aperçu ici: msdn.microsoft.com/en-us/library/dd374089(v=VS.85).aspx et de la section de référence sur le TEXTE de la macro est ici msdn.microsoft.com/en-us/library/dd374086(v=VS.85).aspx La réponse à l'aide wchar_t n'est pas correcte parce que le reste de votre code appelle FindFirstFile qui est une macro qui autoswitches A/W et donc nécessite la macro de TEXTE. Martyn
OriginalL'auteur Martyn Lovell