Pointeur et handle

Résolu
yerosnimus Messages postés 18 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 15 janvier 2007 - 11 janv. 2005 à 17:31
yerosnimus Messages postés 18 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 15 janvier 2007 - 12 janv. 2005 à 10:03
Bonjour,



bon, je suis débutant et surtout autodidacte en programmation. J'essaie
de comprendre actuellement l'utilisation d'un pointeur avec une
fonction précise trouvée sur MSDN. Il s'agit de la fonction RegOpenKey.

La description se trouve ici :



http://msdn.microsoft.com/library/default.asp?url= /library/en-us/sysinfo/base/regopenkey.asp



Le troisième paramètre de cette fonction est un pointeur vers une
variable qui reçoit un handle de la clé ouverte (traduction
approximative, donc ci-après en voici ll'extrait original) :

* phkResult :
[out]
Pointer to a variable that receives a handle to the opened key

Si dans un programme, je veux utiliser cette fonction, il me semble que
je dois déclarer le pointeur de type HANDLE, donc faire quelque
chose comme ça :



HANDLE *phKey;



Ce pointeur devrait être initialisé avec la variable contenant le
handle de la clé, donc j'ai dû aussi déclarer cette variable avec :



HANDLE hkey;



puis initialiser mon pointeur :



phKey = &hkey;



pour finir, je devrais pouvoir utiliser ma fonction :



RegOpenKey(1er paramètre, 2ème paramètre, phKey);



Bien entendu, cela ne fonctionne pas, sinon j'aurais tout compris.
Quelque un pourrait-il m'expliquer où je me trompe dans mon
raisonnement ?



Merci beaucoup de votre patience.



Jerome

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 janv. 2005 à 09:45
j'ai recopier bêtement, phkey doit être un HKEY* et pas un HANDLE*.
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 janv. 2005 à 17:53
RegOpenKey sert à ouvrir une clé et le résultat sera un HANDLE de type HKEY. Mais le résultat n'est pas simplement retourné par la fonction car elle retourne un code d'erreur. Il fuat donc lui passer un pointeur vers ce HKEY pour qu'elle puisse lui donner sa valeur :
HKEY hKey;
RegOpenKey(HKEY_CLASS_ROOT, "tytyyt", &hKey);

Cependant ce que tu fais est bon aussi :
HANDLE* phKey;
HKEY hKey;
phKey = &hKey;
RegOpenKey(HKEY_CLASS_ROOT, "tytyyt", phKey);
=> hKey recevra le handle de la clé.

Si ca ne marche pas, il faut vérifier le code de retour de RegOpenkey (qui renvoi ERROR_SUCCESS soit 0 en cas de succes)

PS : il vaut mieux utiliser les fonctions RgOpenKeyEx et RegCreateKeyEx.
0
yerosnimus Messages postés 18 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 15 janvier 2007
12 janv. 2005 à 09:43
bonjour,



tout d'abord merci pour votre réponse.

Ensuite quelques précisions et remarques :



1/ l'erreur intervient à la compilation : ci-dessous le message d'erreur (avec DEV-C++ 4.9.9.0) :



invalid conversion from `HKEY__**' to `void**'




La ligne pointée par DEV-C++ est celle-ci :



phKey = &hkey;




2/ Quelle différence y a t-il entre mon écriture et la votre concernant cette ligne (à supposer qu'il y en ait une) ?




HANDLE *phKey;


HANDLE* phKey;




3/ Pour info :

si dans ma fonction RegOpenKey, je passe comme 3ème argument l'adresse
de la variable handle (&hkey) comme vous me l'indiquez dans votre
post au lieu de passer le pointeur (phkey) la compilation (et mon code)
fonctionne parfaitement.



Merci



Jerome
0
yerosnimus Messages postés 18 Date d'inscription jeudi 4 novembre 2004 Statut Membre Dernière intervention 15 janvier 2007
12 janv. 2005 à 10:03
Exact, je viens aussi de m'apercevoir de cette erreur.



Encore merci de votre aide



Jerome
0
Rejoignez-nous