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

  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++]CString qui contient un #define

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Visual C++]CString qui contient un #define

n°1127084
AsTro
Posté le 22-06-2005 à 10:23:59  profilanswer
 

Salut,
Je m'explique.
HKEY_CURRENT_USER est un define :
 

Code :
  1. #define HKEY_CURRENT_USER    (( HKEY ) (ULONG_PTR)((LONG)0x80000001) )


 
Moi j'ai une CString qui contient la chaine HKEY_CURRENT_USER soit :
 

Code :
  1. CString str = "HKEY_CURRENT_USER";


 
Comment je peux faire en sorte de récupérer la valeur de HKEY_CURRENT_USER à partir de ma CSTRING str, exemple :
 

Code :
  1. unsigned long ul = fonction(str);


 
Je ne sais pas si je me fais bien comprendre.
Existe-il une fonction qui me permettrait donc de récupérer la valeur de HKEY_CURRENT_USER à partir de ma CString.


---------------
>>>>>> WebFotos <<<<<<
mood
Publicité
Posté le 22-06-2005 à 10:23:59  profilanswer
 

n°1127152
theshockwa​ve
I work at a firm named Koslow
Posté le 22-06-2005 à 11:01:54  profilanswer
 

Tu dois bien avoir un opérateur de comparaison sur les CString, non ?
 
Edit : bingo ... tu dois pouvoir faire une comparaison du style : <pas testé>

Code :
  1. HKEY CStringToKey(const CString &str) {
  2.   if(str == CString("HKEY_CURRENT_USER" ))
  3.     return HKEY_CURRENT_USER;
  4.   return 0;
  5. }


 


Message édité par theshockwave le 22-06-2005 à 11:06:25
n°1127156
AsTro
Posté le 22-06-2005 à 11:03:18  profilanswer
 

Ouais mais justement je voulais éviter une succession de if, else if...
Car je dois le faire pour HKEY_LOCAL_MACHINE et tout le reste.
Mais sinon ca sera la solution effectivement.


Message édité par AsTro le 22-06-2005 à 11:11:27

---------------
>>>>>> WebFotos <<<<<<
n°1127173
theshockwa​ve
I work at a firm named Koslow
Posté le 22-06-2005 à 11:10:25  profilanswer
 

hum ... cf edit ci-dessus :whistle:

n°1127177
AsTro
Posté le 22-06-2005 à 11:11:52  profilanswer
 

theshockwave a écrit :

hum ... cf edit ci-dessus :whistle:


moi aussi j'ai édité :p


---------------
>>>>>> WebFotos <<<<<<
n°1127181
theshockwa​ve
I work at a firm named Koslow
Posté le 22-06-2005 à 11:14:50  profilanswer
 

mmh, je ne crois pas que tu puisses faire autrement .. .tu auras du mal à faire un switch sur des CString :/
 
je crois que la succession de if / else reste ce qu'il y a de mieux à faire ... D'autant plus que les clés de base de registres ne sont pas encore si nombreuses que ca
 
 
Edit :
si, en fait, si, tu peux faire autrement ...
si tu utilises une std::map<CString, HKEY> que tu remplis correctement :D


Message édité par theshockwave le 22-06-2005 à 11:17:00
n°1127202
theshockwa​ve
I work at a firm named Koslow
Posté le 22-06-2005 à 11:28:32  profilanswer
 

exemple vite fait :
 

Code :
  1. #include <map>
  2. class CStringToHKEY {
  3.   std::map<CString, HKEY> cles;
  4. public
  5.   CStringToHKEY() {
  6.     map[ CString("HKEY_CURRENT_USER" ) ] = HKEY_CURRENT_USER;
  7.   }
  8.  
  9.   HKEY operator () (const CString &str) const {
  10.     std::map<CString, HKEY>::const_iterator cle = cles.find(str);
  11.     if(cle != cles.end())
  12.       return cle.second;
  13.     return 0; // probablement générateur de warning pour la conversion implicite en HKEY
  14.   }
  15. }


 
(enfin bon, il y a des moyens de faire mieux, pour éviter de reconstruire la map à chaque fois que tu en as besoin, je te laisse chercher à ce sujet)
(edit: public: et cle  :whistle: )


Message édité par theshockwave le 22-06-2005 à 14:07:17
n°1127322
AsTro
Posté le 22-06-2005 à 13:31:50  profilanswer
 

J'ai fais des if en fin de compte ;)
 

Code :
  1. HKEY CStringToHKEY(CString str)
  2. {
  3.     HKEY hkey = 0;
  4. if(!str.Compare("HKEY_CLASSES_ROOT" ))
  5.  hkey = HKEY_CLASSES_ROOT;
  6. else if (!str.Compare("HKEY_CURRENT_USER" ))
  7.  hkey = HKEY_CURRENT_USER;
  8. else if (!str.Compare("HKEY_LOCAL_MACHINE" ))
  9.  hkey = HKEY_LOCAL_MACHINE;
  10. else if (!str.Compare("HKEY_USERS" ))
  11.  hkey = HKEY_USERS;
  12. else if (!str.Compare("HKEY_CURRENT_CONFIG" ))
  13.  hkey = HKEY_CURRENT_CONFIG;
  14. return hkey;
  15. }


Message édité par AsTro le 22-06-2005 à 13:33:45

---------------
>>>>>> WebFotos <<<<<<
n°1127327
theshockwa​ve
I work at a firm named Koslow
Posté le 22-06-2005 à 13:45:27  profilanswer
 

sans pour autant vouloir insister ... La technique avec la map devrait être plus performante, vu qu'il s'agit d'une recherche dans un arbre au lieu d'une bête comparaison séquentielle sur toutes les possibilités ...
Enfin, c'est vrai que se soucier des performances pour ce cas est probablement exagéré

n°1127670
bjone
Insert booze to continue
Posté le 22-06-2005 à 17:00:29  profilanswer
 

clairement, voire hash_map....


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

  [Visual C++]CString qui contient un #define

 

Sujets relatifs
[Visual C++] VARIANTVisual .NET, MFC, boîte de dialogue et Rich Edit
je recherche un site pour apprendre le visual basicVisual C++ 6 et Visual .NET
[Visual C++] Conversion d'une CString à LPCWSTR?Visual C# > Reinstall de system puis impossible de rouvrir un projet !
[visual c++]dynamic_castOpenGl dans une fenêtre définie avec visual .Net
[Visual C++/MFC] Redimensionnement 
Plus de sujets relatifs à : [Visual C++]CString qui contient un #define


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