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

MFC Discussion :

récupérer une chaîne depuis le registre


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut récupérer une chaîne depuis le registre
    Bonjour à tous et à toutes,

    voici mon problème : je dois récupérer une chaîne de caractères contenue dans l'une des variables du registre et la stocker dans une variable.
    En cherchant à droite et à gauche sur Internet, j'ai fini par trouver quelques idées.
    Cependant, depuis que j'ai ajouté ce bout de code, mon exécutable plante méchamment (tentative de violation d'accès sur une mémoire protégée) et ferme ma plateforme de développement (Visual Studio 2005).

    Voici le morceau de code qui pose problème :

    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
    HKEY hKeyPath=NULL;
    char szKeyName[1024];
    char szPathName[1024];
    DWORD dwKeySize;
    DWORD dwPathSize;
     
    CString sStringValue;
     
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)"SOFTWARE\\SEINEN\\mon_registre",1, KEY_ALL_ACCESS, &hKeyPath)== ERROR_SUCCESS)
    {
    	dwKeySize = sizeof (szKeyName);
    	dwStringSize = sizeof (szStringName);
     
    	if(RegEnumValue(hKeyPath, NULL, (LPTSTR)szKeyName, &dwKeySize, NULL, NULL,(LPBYTE) szStringName, &dwStringSize)== ERROR_SUCCESS)
    	{
    	//Déclaration de la variable stockant la chaîne
    		CString sRegisterValue(szStringName);
    		sStringValue = sRegisterValue;
    	}
    }
    Quelqu'un aurait-il une idée à me proposer ?

    Je vous remercie d'avoir pris la peine de lire mon post.
    Seinen.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Le 6ème paramètre est à NULL. Donc si ton entrée de registre n'est pas de type chaîne de caractère, mais par exemple un DWORD, alors szPathName ne contient pas une chaîne de caractère. Essaie de récupérer le type et de tester si c'est une chaîne de caractère.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Merci pour ta réponse 3DArchi.

    Dois-je donc écrire ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(RegEnumValue(hKeyPath, NULL, (LPTSTR)szKeyName, &dwKeySize, NULL, REG_SZ,(LPBYTE) szPathName, &dwPathSize)== ERROR_SUCCESS)

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Ce serait plutôt quelque chose de ce gout là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            DWORD dwType;
    	if((RegEnumValue(hKeyPath, NULL, (LPTSTR)szKeyName, &dwKeySize, NULL, &dwType,(LPBYTE) szPathName, &dwPathSize)== ERROR_SUCCESS)
              && (REG_SZ==dwType)
    	){
    	//Déclaration de la variable stockant la chaîne
    		CString sRegisterValue(szPathName);
    		sPathNameString = sRegisterValue;
    	}

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Bon, j'ai réussi à récupérer ma chaîne depuis le registre.
    J'ai utilisé la fonction RegQueryValue à la place de RegEnumValue.

    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
    if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\SEINEN\\mon_registre"),0,KEY_READ,(PHKEY)&hKeyPath) == ERROR_SUCCESS)
    	{
    	//Nombre de variables contenues dans la clé.
    		DWORD    cValues; 
     
    	//Variable contenant la longueur de la chaîne
    		DWORD pchValue = MAX_VALUE_NAME;
     
    	// Vérifier que la variable existe. 
    		RegQueryInfoKey(hKeyPath,NULL,NULL,NULL,NULL,NULL,NULL,&cValues,NULL,NULL,NULL,NULL);
     
    	// Obtention de la chaîne (si la variable est existante) 
    		if (cValues) 
    		{
    			pchValue = MAX_VALUE_NAME; 
     
    			RegQueryValueEx(hKeyPath,TEXT("ma_chaine"),NULL,NULL,(LPBYTE)cStringValue,&pchValue);
     
    		//Conversion de char* vers CString
     
    				CString sNameString(cStringValue);
     
     
    		}
     
    		RegCloseKey(hKeyPath);
    	}
    Cependant, lorsque j'essaye de convertir cStringValue (qui est un char*) en CString, je ne récupère que la première lettre de ma chaîne.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Bonne nouvelle, j'ai trouvé le moyen de récupérer l'ensemble de ma chaîne.
    C'était juste une histoire de cast.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sPathNameString=(LPCWSTR)cEtiquetteName;
    Avec ce cast, ça fonctionne sans problème.

    Je te remercie 3DArchi de m'avoir éclairé.

  7. #7
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut

    Bonne nouvelle, j'ai trouvé le moyen de récupérer l'ensemble de ma chaîne.
    C'était juste une histoire de cast.
    si tu déclarais ton buffer en TCHAR au lieu de char, ça serait mieux ...

    tu mélanges les char et TCHAR ...

    @+

  8. #8
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    salut stephdim,

    quelle est la différence entre un char et un TCHAR ?
    Je ne la connais pas. De ce fait, je les mélange souvent.

    Merci.
    Seinen.

Discussions similaires

  1. [AJAX] récupérer une valeur depuis responseText
    Par Ministar dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 11/10/2007, 13h33
  2. Expression régulière pour récupérer une chaîne.
    Par z980x dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/06/2007, 15h01
  3. Récupérer une structure depuis une liste
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 01/04/2007, 21h34
  4. Récupérer une date depuis une page ASP dans une BDD
    Par franckrichard57 dans le forum ASP
    Réponses: 2
    Dernier message: 22/03/2007, 11h31
  5. [OS Perso] Récupérer une chaîne de caractères
    Par log2n dans le forum Programmation d'OS
    Réponses: 31
    Dernier message: 14/02/2006, 13h56

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