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 :

Winapi C recupérer et lire une valeur CHAR du registre avec printf


Sujet :

C

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut Winapi C recupérer et lire une valeur CHAR du registre avec printf
    salut a tous alors voila mon code qui est dans un thread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	HKEY hKey;
    	long lerr;
    	char szpath[MAX_PATH];
    	DWORD dwLen = MAX_PATH;
    	RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\International\\sLanguage",0, KEY_ALL_ACCESS, &hKey);
    	lerr = RegQueryValueEx(hKey, NULL, 0, 0, (BYTE*) szpath, &dwLen);
    	RegCloseKey(hKey);
    	printf("\n\n resultat = %s  \n\n " , szpath);
    	return 0;
    il est censé retourné une string , mais rien retourne des caractères bizard par e printf , et meme si je change le chemin il retourne toujours la meme chose , je vois pas ou est le probleme . le resultat retourné doit etre la langue parlé soit FRA . merci

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Peut être un problème MBCS / Unicode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    HKEY hKey;
    long lerr;
    TCHAR szpath[MAX_PATH];
    DWORD dwLen = MAX_PATH;
    RegOpenKeyEx(HKEY_CURRENT_USER, _T("Control Panel\\International\\sLanguage"),0, KEY_ALL_ACCESS, &hKey);
    lerr = RegQueryValueEx(hKey, NULL, 0, 0, (BYTE*) szpath, &dwLen);
    RegCloseKey(hKey);
    _tprintf(_T("\n\n resultat = %s \n\n ") , szpath);
    Ne pas faire l'impasse sur la vérification des retours de fonctions sur RegOpenKeyEx() et RegQueryValueEx().

    Autre point important, d'après la doc, les chaines de caractères retournées ne sont pas garanties être terminées par NULL avec RegQueryValueEx():

    To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function.

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    désolé mais je pense pas avoir compris _T surtout
    warning = '_T' undefined; assuming extern returning int
    warning C4013: '_T' undefined; assuming extern returning int
    warning C4024: 'RegOpenKeyExA' : different types for formal and actual parameter 2
    warning C4013: '_tprintf' undefined; assuming extern returning int
    fatal error C1004: unexpected end of file found

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    _T est une macro (inclue dans <tchar.h>) permettant de compiler du code pour MBCS et pour Unicode.

    Vu les erreurs ("RegOpenKeyExA" en MBCS, ça aurait du être "RegOpenKeyExW" si tu compilais avec _UNICODE défini) tu es en MBCS:

    Citation Envoyé par Shark9 Voir le message
    désolé mais je pense pas avoir compris _T surtout
    warning = '_T' undefined; assuming extern returning int
    warning C4013: '_T' undefined; assuming extern returning int
    warning C4024: 'RegOpenKeyExA' : different types for formal and actual parameter 2
    warning C4013: '_tprintf' undefined; assuming extern returning int
    fatal error C1004: unexpected end of file found
    Comme tu es en MBCS, revient à ton code d'origine. Vérifie le code de retour RegOpenKeyEx() et utilise RegGetValue() en lieu et place de RegQueryValueEx().

    N'oublie pas de vérifier le code de retour de RegGetValue() aussi.

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Points : 57
    Points
    57
    Par défaut
    merci pas de soucis je vais etudié cette commande merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/06/2009, 09h43
  2. registre lire une valeur binere
    Par CLion dans le forum Windows
    Réponses: 3
    Dernier message: 05/11/2006, 23h39
  3. [DEBUTANT] Lire une valeur d'une collection
    Par ero-sennin dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 03/11/2006, 21h43
  4. Comment Lire une valeur à partir d'un fichier XML en C++?
    Par Hamdi Hedhili dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/12/2005, 11h09
  5. Lire une valeur dans le registre
    Par John.s dans le forum C
    Réponses: 2
    Dernier message: 26/11/2003, 20h55

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