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 :

Déb prob de chaîne et de pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut Déb prob de chaîne et de pointeur
    Salut à tous.
    Je suis complètement débutant en C++, vous allez vous en rendre compte.

    J'utilisais la fonction LONG WINAPI RegOpenKey( HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult); sous DEVC++ en lui passant directement la clé sous forme de chaîne "maCle", ça marchait.

    Sous VisualC++ ça fait une erreur:
    impossible de convertir le paramètre 2 de 'const char [47]' en 'LPCWSTR'

    donc je fais le code suivant:

    //on déclare la chaîne de caractère à transmettre
    wchar_t cCle[MAX_PATH];
    //on passe par la string sCle pour assigne chaque élément de la chaîne cStr
    string sCle("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");
    for(size_t i=0; i<sCle.size();i++ ){
    cCle[i]=sCle[i];
    }
    //on met le dernier élément sur NULL
    cCle[sCle.size()]= NULL;

    Je transmet cCle et ça marche, mais ça ne me semble pas être les règles de l'art.
    N'y-a-t'il pas mieux pour assigner et transmettre un LPCWSTR ou un LPCTSTR (quelle est la différence?) à une fonction.

    Merci à tous.

    Alain

  2. #2
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    En fait, wchar_t signifie une chaîne unicode (un caractère = 2 octets [= 2 char = short int en ocupation mémoire]) hors un "texte" est un "const char *"
    Une chaîne unicode peut contenir des caractères ASCII mais aussi des caractères en tout genre (symboles mathématiques, langues étrangères tel que le japonais, koréen...), c'est ce qui la diférencie d'une simple chaine.
    Un LPCTSTR est en fait un "typedef const TCHAR *LPCTSTR" soit un "typedef wchar_t*" ou bien "typedef char*"
    Cf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef UNICODE
    typedef wchar_t TCHAR;
    #else
    typedef char TCHAR;
    #endif
    En fait cela peut changer a la compilation selon si tu compile en unicode ou non ^^
    Un LPCWSTR est en fait ... "typedef CONST WCHAR *LPCWSTR" soit toujours un "typedef const wchar_t*"

    J'espère que ceci ta un peut éclairer.
    Pour els chaines unicode : http://cpp.developpez.com/faq/cpp/?p...TRINGS_wstring
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Bonjour,
    Il y a quatre solutions possibles à ton problème, par ordre de préférence
    1. Tout faire en TCHAR pour utiliser RegOpenKeyEx() :
      http://www.developpez.net/forums/sho...d.php?t=308239
      http://www.developpez.net/forums/sho...9&postcount=13
      http://www.developpez.net/forums/sho...d.php?t=236792
    2. Tout faire en unicode (wchar_t etc.) Appeler systématiquement la version W des fonctions (notamment RegOpenKeyExW().
    3. Changer les propriétés du projet pour désactiver l'unicode, ce qui supprimera les erreurs.
      Project Properties -> Configuration Properties -> General -> Character Set -> Use Multi-Byte Character Set
    4. Tout faire en char, et utiliser la version A des fonctions: RegOpenKeyExA() ne posera pas d'erreur.

    PS: Comme indiqué dans l'aide, RegOpenKey() est obsolète et ne doit plus être utilisée. Utiliser RegOpenKeyEx() à la place.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Tu as poster deux posts identiques dans la même section....

    ma réponse ici : http://www.developpez.net/forums/sho...d.php?t=409583

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut
    Merci à tous, c'est déjà beaucoup plus clair, et surtout ça marche.
    Alain

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/03/2012, 00h26
  2. Modifier une chaîne d'un pointeur constant
    Par oranoutan dans le forum C
    Réponses: 7
    Dernier message: 25/05/2007, 16h32
  3. [Prob] classe + pointeur + tableau :x
    Par Saturnin123 dans le forum C++
    Réponses: 4
    Dernier message: 12/07/2006, 14h41
  4. Problème de gestion de chaînes avec pointeur
    Par LorDjidane dans le forum C
    Réponses: 18
    Dernier message: 19/10/2005, 15h40
  5. Réponses: 6
    Dernier message: 12/10/2003, 14h57

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