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 :

[Registre] Problème de passage d'arguments


Sujet :

C++

  1. #1
    Membre actif
    Avatar de nicolas.pied
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Janvier 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Janvier 2005
    Messages : 249
    Points : 235
    Points
    235
    Par défaut [Registre] Problème de passage d'arguments
    Bonjour,

    Je suis en train d'élaborer une classe pour avoir accès au registre Windows, mais je rencontre un problème de type d'argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int res = RegOpenKeyEx(
      HKEY_LOCAL_MACHINE, 
      (LPCWSTR) keyPath, 
      0,
      KEY_QUERY_VALUE, 
      &hKeyTmp);
     
    res = RegOpenKeyEx(
      HKEY_LOCAL_MACHINE,
      (LPCWSTR) TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 
      0, 
      KEY_QUERY_VALUE, 
      &hKeyTmp );
    La variable keyPath est de type const char * et contient la chaîne : "SYSTEM\\CurrentControlSet\\Control\\ProductOptions"

    La seconde ligne fonctionne mais pas la première qui me retourne le code d'erreur 2.

    Le problème est au niveau de la variable keyPath mais je ne vois pas pourquoi cela ne fonctionne pas (tout compile et s'execute correctement). Peut être est-ce un problème d'encodage ?

    Avez-vous une réponse à ce problème ?

    Merci.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu tentes de caster un const char * en const wchar_t * et tu t'étonnes que ça foire.
    TEXT() permettait de déclarer une chaîne directement dans le format attendu par Windows.
    En fait, il y a trois bonnes méthodes:

    Et évidemment, on peut remplacer char const * par LPCSTR, wchar_t const * par LPCWSTR et TCHAR const * par LPCTSTR, ce sont des typedefs...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Notes: Note bien le 'L' devant la chaîne pour la solution WCHAR.
    Quant à la solution recommandée pour Windows, c'est la solution TCHAR.
    TCHAR est en fait un typedef qui selon les options du projet, représente soit un char soit un wchar_t.

  4. #4
    Membre actif
    Avatar de nicolas.pied
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Janvier 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Janvier 2005
    Messages : 249
    Points : 235
    Points
    235
    Par défaut
    Merci pour vos réponses.

    Par contre la première solution ne fonctionne pas (celle avec char).

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Bizarre...
    Tu as bien mis RegOpenKeyExA( ?

  6. #6
    Membre actif
    Avatar de nicolas.pied
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Janvier 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Janvier 2005
    Messages : 249
    Points : 235
    Points
    235
    Par défaut
    Oups, je n'avais pas remarquer le A. Merci bien, tout fonctionne !

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/08/2011, 21h16
  2. problème de passage d'argument lors de la création d'un thread
    Par boilu dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 08/08/2011, 21h44
  3. problème en passage d'arguments
    Par soumti84 dans le forum Général Java
    Réponses: 9
    Dernier message: 29/03/2009, 17h53
  4. [Syntaxe] problème de passage de type en argument
    Par coyotte507 dans le forum C++
    Réponses: 2
    Dernier message: 25/05/2007, 15h50
  5. [Configuration] Problème de passage d'argument
    Par bugs58 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 15/12/2006, 11h20

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