Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1200 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] Ecrire dans la base de registre/conversion

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Ecrire dans la base de registre/conversion

n°402146
polo021
Posté le 21-05-2003 à 09:47:50  profilanswer
 

Voici le probleme, j'ecris une adresse IP dans la base de registre mais quand je vais voir ce qui s'y trouve, le contenu ne correspond pas a l'adresse que je voulais ecrire
 

Code :
  1. HKEY hkey;
  2. DWORD dwDisposition;
  3. DWORD dwType, dwSize;
  4. char* texte = (char*) calloc(255, sizeof(char));
  5. strcpy(texte,"192.168.0.2" );
  6. if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
  7.  TEXT("Software\\MyCompany\\My Application " ), 0, NULL, 0, 0, NULL, &hkey, &dwDisposition)==
  8.  ERROR_SUCCESS)
  9. {
  10.  dwType = REG_SZ;
  11.  RegSetValueEx(hkey, TEXT("BACKUPIP" ), 0, dwType,
  12.  (PBYTE)&texte, 12);
  13.  RegCloseKey(hkey);
  14.  AfxMessageBox(CString("ok" ));
  15. }
  16. else
  17.  AfxMessageBox(CString("Pas ok" ));


 
et quand je vais lire manuellement ce qu'il y a dans la BDR, je vois des carres, et si je lis pas mon programme

Code :
  1. HKEY hkey;
  2. DWORD dwDisposition;
  3. DWORD dwType, dwSize;
  4. char* texte = (char*) calloc(255, sizeof(char));
  5. char* texte2 = (char*) calloc(255, sizeof(char));
  6. // Set the default values
  7. strcpy(texte2,"voila" );
  8. m_edit1 = texte2;
  9.  UpdateData(FALSE);
  10. if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\My Company\\My Application" ), 0, NULL, 0, 0, NULL, &hkey, &dwDisposition)==
  11.  ERROR_SUCCESS)
  12. {
  13.  dwType = REG_SZ;
  14.  dwSize = 12;
  15.  RegQueryValueEx(hkey, TEXT("BACKUPIP" ), NULL, &dwType,
  16.   (PBYTE)&texte
  17.   , &dwSize);
  18.   RegCloseKey(hkey);
  19.  AfxMessageBox(CString("ok" ));
  20.  m_edit1 = texte;
  21.  UpdateData(FALSE);
  22. }
  23. else
  24.  AfxMessageBox(CString("Pas ok" ));


j'affiche la valeur lue (texte) dans un edit mais il n'affiche rien.
 
Quelqu'un a deja connu ce probleme ou un similaire??


Message édité par polo021 le 22-05-2003 à 13:50:11
mood
Publicité
Posté le 21-05-2003 à 09:47:50  profilanswer
 

n°402191
chrisbk
-
Posté le 21-05-2003 à 09:59:26  profilanswer
 

  RegSetValueEx(hkey, TEXT("BACKUPIP" ), 0, dwType,  
      (PBYTE)&texte, 12);
 
la est l'erreur je pense

n°402209
polo021
Posté le 21-05-2003 à 10:06:46  profilanswer
 

harf ca aurait eu du mal de fonctionner
je vais ecrire dans

Citation :

My Company


et je lis dans

Citation :

MyCompany


 
 :pfff:  
 
mais sinon maintenant j'arrive a aller relire la bonne valeur par mon programme mais manuellement si je vais voir la valeur dans la BDR y a toujours ces fameux carres. C'est normal?

n°402212
chrisbk
-
Posté le 21-05-2003 à 10:08:20  profilanswer
 

RegSetValueEx(hkey, TEXT("BACKUPIP" ), 0, dwType,  
      (PBYTE)&texte, 12);
 
la est l'erreur je pense

n°402216
polo021
Posté le 21-05-2003 à 10:10:27  profilanswer
 

ha ben en fait non ca va pour aller relire car si je lis directement apres avoir ecrit, c;est bon mais si je ferme le programme puis le reouvre pour aller ilre ca va pu.
 
chrisbk > je vais regarder a
RegSetValueEx(hkey, TEXT("BACKUPIP" ), 0, dwType,    
     (PBYTE)&texte, 12);  
mais c'est l'exemple type de l'MSDN  :(

n°402217
chrisbk
-
Posté le 21-05-2003 à 10:10:34  profilanswer
 

effectivement viens de verifier dans la msdn, la est l'erreur

n°402219
chrisbk
-
Posté le 21-05-2003 à 10:11:27  profilanswer
 

LONG RegSetValueEx(
  HKEY hKey,
  LPCTSTR lpValueName,
  DWORD Reserved,
  DWORD dwType,
  const BYTE* lpData,
  DWORD cbData
);
 
toi tu passes un char ** (&texte)
 
je doute fort que l'exemple de la msdn utilise une variable nommee "texte" mais bon

n°402259
polo021
Posté le 21-05-2003 à 10:27:37  profilanswer
 

effectivement, au debut j'avais modifie l'exemple de l'MSDN.
 
Maintenant ca fonctionne.
 
 :jap: Merci beaucoup
 
EDIT : juste une question encore:  
 maintenant j'arrive a aller relire la bonne valeur par mon programme, mais manuellement si je vais voir la valeur dans la BDR y a toujours ces fameux carres. C'est normal?


Message édité par polo021 le 21-05-2003 à 10:30:02
n°402715
polo021
Posté le 21-05-2003 à 14:16:31  profilanswer
 

j'ai de nouveau un probleme:
 
Mon programme est donc fait pour ecrire et lire dans la base de registre.
 
Si j'ecris une valeur dans ma base de registre avec le code suivant, que je ferme le programme, le reouvre et vais la relire ca fonctionne nickel

Code :
  1. HKEY hkey;
  2. DWORD dwDisposition;
  3. DWORD dwType, dwSize;
  4. BYTE* value = (BYTE*) calloc (20,sizeof(BYTE));
  5. value = (PBYTE)"LUXA";
  6. AfxMessageBox(CString("affichage value" ));
  7. AfxMessageBox((CString)value);
  8. if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
  9.  TEXT("Software\\Companie\\Programme" )
  10.  , 0, NULL, 0, 0, NULL,
  11.  &hkey, &dwDisposition)==
  12.  ERROR_SUCCESS)
  13. {
  14.  dwType = REG_SZ;
  15.  dwSize = 20;
  16.  RegSetValueEx(hkey, TEXT("PPCLocation" ), 0, dwType, 
  17.       (PBYTE)&value, 20);
  18.  RegCloseKey(hkey);
  19.  AfxMessageBox(CString("New value saved" ));
  20. }
  21. else
  22.  AfxMessageBox(CString("Error" ));


 
tandis que si je l'ecris avec le code suivant, que je ferme le pgm , le reouvre et que je vais tenter de relire la valeur, elle ne s'y trouve plus. Voici le code

Code :
  1. HKEY hkey;
  2. DWORD dwDisposition;
  3. DWORD dwType, dwSize;
  4. BYTE* value = (BYTE*) calloc (20,sizeof(BYTE));
  5. char* temp = (char*) calloc(20,sizeof(char));
  6. strcpy(temp,"LUXI" );
  7. int i=0;
  8. while(temp[i]!='\0')
  9. {
  10.  value[i] = temp[i];
  11.  ++i;
  12. }
  13. AfxMessageBox(CString("affichage value" ));
  14. AfxMessageBox((CString)value);
  15. if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
  16.  TEXT("Software\\Companie\\Programme" )
  17.  , 0, NULL, 0, 0, NULL,
  18.  &hkey, &dwDisposition)==
  19.  ERROR_SUCCESS)
  20. {
  21.  dwType = REG_SZ;
  22.  dwSize = 20;
  23.  RegSetValueEx(hkey, TEXT("PPCLocation" ), 0, dwType, 
  24.       (PBYTE)&value, 20);
  25.  RegCloseKey(hkey);
  26.  AfxMessageBox(CString("New value saved" ));
  27. }
  28. else
  29.  AfxMessageBox(CString("Error" ));


 
Quelqu'un sait pourquoi? ou a une idee?


Message édité par polo021 le 21-05-2003 à 14:19:36
n°402726
chrisbk
-
Posté le 21-05-2003 à 14:23:59  profilanswer
 

LONG RegSetValueEx(  
 HKEY hKey,  
 LPCTSTR lpValueName,  
 DWORD Reserved,  
 DWORD dwType,  
const BYTE* lpData,
 DWORD cbData  
);  
 
BYTE* value
 
 RegSetValueEx(hkey, TEXT("PPCLocation" ), 0, dwType,  
          (PBYTE)&value, 20);
 
 
ca marche ca :heink:
 
(et c du code degueu ton truc)

mood
Publicité
Posté le 21-05-2003 à 14:23:59  profilanswer
 

n°402761
polo021
Posté le 21-05-2003 à 14:40:18  profilanswer
 

oui ca marche comme ca, a condition que j'entre ma valeur de la facon suivante :

Code :
  1. value = (PBYTE)"LUXA";


 
Maintenant, si j'arrive a aller chercher ma valeur dans un EDIT ce sera tout bon mais pour l'instant ca ne fonctionne pas.

n°402808
polo021
Posté le 21-05-2003 à 14:53:48  profilanswer
 

:bounce:  
Comment faire pour convertir la valeur d'un edit (une chaine de char) de facon a obtenir le meme resultat que si j'avais fait
value = (PBYTE)"LUXA";
 
value etant un BYTE*

n°402848
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 21-05-2003 à 15:06:41  profilanswer
 

Chapeau pour le meli-mélo de C et C++ [:xp1700]


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°402851
polo021
Posté le 21-05-2003 à 15:07:42  profilanswer
 

franchement pour l'instant je m'en fous un peu :o

n°402853
chrisbk
-
Posté le 21-05-2003 à 15:07:50  profilanswer
 

Tetragrammaton IHVH a écrit :

Chapeau pour le meli-mélo de C et C++ [:xp1700]


meme pas, il ferait du C il aurait remplacé  
 

Code :
  1. char* texte2 = (char*) calloc(255, sizeof(char));
  2. strcpy(texte2,"voila" );


 
par
 
texte2 = strdup("voila" );
 
mais bon hein ?

n°402854
chrisbk
-
Posté le 21-05-2003 à 15:08:16  profilanswer
 

polo021 a écrit :

franchement pour l'instant je m'en fous un peu :o  


 
ben ouais mais a relire c franchement infect :O

n°402883
polo021
Posté le 21-05-2003 à 15:16:36  profilanswer
 

chrisbk a écrit :


texte2 = strdup("voila" );


je connaisais meme pas.

n°402885
polo021
Posté le 21-05-2003 à 15:18:13  profilanswer
 

merci kayasax mais je pense que c'est pas trop ca.
 
 :jap:

n°402889
polo021
Posté le 21-05-2003 à 15:19:46  profilanswer
 

chrisbk a écrit :


 
ben ouais mais a relire c franchement infect :O
 


c'est vrai que niveau proprete du code, je suis pas trop au top mais bon ca viendra j'espere.
 
 
Pour mon probleme vous n'avez toujours pas une idee de pourquoi ca marche avec value = (PBYTE)"LUXA";  
mais pas avec une valeur provenant d'un CEdit?

n°402891
chrisbk
-
Posté le 21-05-2003 à 15:20:45  profilanswer
 

polo021 a écrit :


c'est vrai que niveau proprete du code, je suis pas trop au top mais bon ca viendra j'espere.
 
 
Pour mon probleme vous n'avez toujours pas une idee de pourquoi ca marche avec value = (PBYTE)"LUXA";  
mais pas avec une valeur provenant d'un CEdit?


 
attaque ca au debugueur, regarde si tu ressors bien qqchose de CEdit, regarde meme si tu chies pas dans la recuperation dudit CEdit

n°402907
polo021
Posté le 21-05-2003 à 15:25:45  profilanswer
 

non en fait ca n'a peut etre meme rien a voir. Le probleme c'est que si j'ecrit la valeur dans la BDR et que je la relie tout de suite apres, ca fonctionne mais si je la relie avec une autre instance du programme ilne l'a trouve plus.
Donc je ne compreends plus rien.  
Soit le probleme vient du fait que j'ecris dans le BDR une valeur pas tres bien convertie, soit le probleme est ailleurs mais ou?

n°404180
polo021
Posté le 22-05-2003 à 13:37:43  profilanswer
 

bon voici la solution qui fonctionne a merveille
LECTURE DANS LA BDR :

Code :
  1. HKEY m_hkey;
  2.  CString m_strSubkey;
  3. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Company\\MDM" ), 0, KEY_ALL_ACCESS, &m_hkey) != ERROR_SUCCESS)
  4.  {
  5.   m_hkey = 0;
  6.   AfxMessageBox(CString("This key does not exist!" ));
  7.  }
  8.  else
  9.  {
  10.   LPCTSTR pcszKey = TEXT("PPCLoc" );
  11.   DWORD dwDataSize = 0;
  12.   DWORD dwType = REG_SZ;
  13.   if(RegQueryValueEx(m_hkey, pcszKey, 0, &dwType, (PBYTE)NULL, &dwDataSize) == ERROR_SUCCESS)
  14.   {
  15.    CString strValue;
  16.    if(RegQueryValueEx(m_hkey, pcszKey, 0, &dwType, (PBYTE)(LPTSTR)strValue.GetBuffer(dwDataSize + 1), &dwDataSize) == ERROR_SUCCESS)
  17.    {
  18.     strValue.ReleaseBuffer();
  19.    m_PPCLoc = strValue;
  20.     UpdateData(FALSE);
  21.    }
  22.    else
  23.    {
  24.     strValue.ReleaseBuffer();
  25.    }
  26.   }
  27.  }
  28.  closeHKEY(m_hkey);


 
ECRITURE DANS LA BDR

Code :
  1. HKEY m_hkey;
  2. DWORD m_dwDisposition;
  3. int m_nSubkeyIndex;
  4. CString m_strSubkey;
  5. HKEY hkeyParent;
  6. LPCTSTR pcszSubkey;
  7. if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Company\\MDM" ), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &m_hkey, &m_dwDisposition) != ERROR_SUCCESS)
  8. {
  9.  AfxMessageBox(CString("Unable to create subkey" ));
  10.  return (false);
  11. }
  12. else
  13. {
  14. //value est la valeur de la cle et name est le nom de la SubKey
  15.  LPCTSTR pcszValue = value;
  16.  if(RegSetValueEx(m_hkey,name, 0, REG_SZ, (PBYTE)pcszValue, (_tcslen(pcszValue) + 1) * sizeof(TCHAR)) == ERROR_SUCCESS)
  17.  {
  18.   AfxMessageBox(CString("Subkey written" ));
  19.   return (true);
  20.  }
  21.  else
  22.  {
  23.   AfxMessageBox(CString("SubKey not written" ));
  24.   return (false);
  25.  }
  26.  }
  27. closeHKEY(m_hkey);


 

Code :
  1. bool closeHKEY(HKEY m_hkey)
  2. {
  3. if(m_hkey)
  4. {
  5.  RegCloseKey(m_hkey);
  6.  m_hkey = 0;
  7.  return TRUE;
  8. }
  9. else
  10.  return false;


 
voila, merci a ceux qui m'ont aide et aux autres aussi.

n°404194
chrisbk
-
Posté le 22-05-2003 à 13:41:08  profilanswer
 

Code :
  1. if(RegSetValueEx(m_hkey,name, 0, REG_SZ, (PBYTE)pcszValue, (_tcslen(pcszValue) + 1) * sizeof(TCHAR)) == ERROR_SUCCESS)


 
j'en pleure de joie, il a enfin cpris que la fonction voulait un BYTE * et pas un BYTE ** :D

n°404228
polo021
Posté le 22-05-2003 à 13:49:39  profilanswer
 

chrisbk a écrit :

Code :
  1. if(RegSetValueEx(m_hkey,name, 0, REG_SZ, (PBYTE)pcszValue, (_tcslen(pcszValue) + 1) * sizeof(TCHAR)) == ERROR_SUCCESS)


 
j'en pleure de joie, il a enfin cpris que la fonction voulait un BYTE * et pas un BYTE ** :D
 


 :whistle:  y avait aussi quelque gros problemes pour les CString mais c'est resolu aussi  :o  
 
 :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] Ecrire dans la base de registre/conversion

 

Sujets relatifs
[méga débutant] j'arrive pas à me connecter à ma baseAlgo pour conversion Timestamp <-> Date ISO
[VB.net] une fonction pour terminer le programme [resolu]Requete SQL sous SQLserver : ca marche pas ... RESOLU !!!!
[RESOLU] [ACCESS] Créer des réferences simplifié a partir d'une tablealgo de conversion d image 16 bits en 24 bits
prob entre VB 6 et Access 2000...! **[Résolu]**XML et base de donnée
Lecture d'une base access avec PhpComment ecrire un premier client J2EE ?
Plus de sujets relatifs à : [Resolu] Ecrire dans la base de registre/conversion


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR