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

C Discussion :

incompréhension types unicode (CStringW, wchar_t, etc.)


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 41
    Points
    41
    Par défaut incompréhension types unicode (CStringW, wchar_t, etc.)
    Bonjour,

    Je fais face à quelques problèmes de compatibilité entre certaines fonctions que je récupère sur le web et que je souhaiterais intégrer dans mon code.
    Je n'ai jusque là jamais utilisé l'Unicode pour mes quelques applications de base.
    Je connais donc les types classiques comme int, int*.., char, char*.., float (...)

    Pour illustrer tout ça je vous propose le code que j'ai écrit ce matin, qui extrait d'un chemin complet, le chemin sans le fichier.


    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
    void getDirectoryNameFromFullPath(LPWSTR fullPath, LPWSTR DirPath)
    {
     
    	int pos = 0;
    	char* pch;
     
    	// une conversion en char* (histoire de retomber sur mes pattes :)
    	char converted[255];
    	char result[255];
    	int curA = 0;
     
    	memset(converted, '\0', 255);
     
    	WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, fullPath, -1, converted, 255, NULL, NULL);
    	pch = strrchr(converted,'\\');
    	pos = (int)(pch-converted+1);
    	//printf("\n'%s' contains last '/' on : '%d'", converted, pos);
     
    	memset(result, '\0', 255);
    	for (curA = 0; curA < pos-1; curA++)
    		result[curA] = converted[curA];
     
    	//printf("\ndirpath = %s", result);
     
    	// une conversion en LPWSTR???, histoire de récupérer le type imposé
    	MultiByteToWideChar(CP_ACP, MB_COMPOSITE, result, -1, DirPath, 255);
    	//wprintf(L"\ndirpath = %s", DirPath);
     
    }
    J'en ai d'autres des comme ça car ici je devais traiter des LPWSTR (WCHAR*?), mais après il y a aussi les CStringW

    Vous pouvez le constater, je ne suis pas à l'aise du tout avec ces concept, nouveaux pour moi.

    Peut être sauriez vous m'orienter pour résorber ces lacunes?

    Après de multiples recherches sur le web, à part bricoler des solution tordues à base de char*, je ne sais pas vraiment faire autrement.

    Je vous remercie par avance pour vos suggestions.

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Rien à voir avec ton problème de conversion, mais pourquoi tu convertis des chaines unicode en ansi alors que tu peux faire tous tes traitements en unicode !!! (wcsrchr à la place de strrchr).

    J'en ai d'autres des comme ça car ici je devais traiter des LPWSTR (WCHAR*?), mais après il y a aussi les CStringW
    WCHAR* et LPWSTR sont des pointeurs sur des chaines, CStringW est une classe, donc ça n'est pas la même chose.

Discussions similaires

  1. convertir un type unicode en date
    Par mon_proj dans le forum wxPython
    Réponses: 2
    Dernier message: 25/04/2008, 13h45
  2. Type ENSEMBLE (intersection, soustraction etc)
    Par DURVILLE dans le forum Delphi
    Réponses: 13
    Dernier message: 30/04/2007, 19h33
  3. Pb compilation: type defaults to 'int' etc
    Par vinzzzz dans le forum C
    Réponses: 6
    Dernier message: 31/10/2006, 14h34
  4. Réponses: 21
    Dernier message: 20/02/2006, 11h00

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