Variable pour un hook

Signaler
Messages postés
32
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
19 juin 2007
-
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
Bonjour à tous,
Il y a un problème sur lequel je bloque depuis déjà plusieurs jours.
J'ai créé une dll pour faire un hook clavier. Quand j'appelle la fonction de la dll pour activer le hook je n'arrive pas a passé une variable a ce dernier.
Pour mieux me faire comprendre voici un bout du code de la dll:
extern "C" void WINAPI Charger(char fichier[])
{
Socket = sock;
strcpy(CheminFichier,fichier);
HKEYBOARD = SetWindowsHookEx ( WH_KEYBOARD, (HOOKPROC)KeyboardProc, HInst, 0 );
}
CheminFichier est un char[250] déclaré en globale dans la dll.
Je pense que le problème vient du fait que l'instance de la fonction Charger est celle de l'exécutable appelant la dll alors que l'instance du hook (HInst) est l'instance de la dll. Etant un peu un noob il est possible que je me trompe totalement... C'est juste l'impression que tout cela me donne.
Bref au final lorsque je fais un MessageBox de CheminFichier dans le thread du hook ou dans n'importe quelle fonction appelé par ce dernier je me rends compte que la variable est vide. Alors fait ce MessageBox a partir d'une autre fonction extern "C", donc appelé du l'exécutable, CheminFichier vaut ce qu'il devrai valoir!
Je me demande donc comment pouvoir passer ce problème. Peut-être existe t'il une alternative au extern "C" qui ferai en sorte que l'instance donnée a la fonction soit celle de la dll.

Merci d'avance pour toutes réponses!
++

3 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Il faut faire en sorte que toutes les instances de la dll puissent accéder à la chaine :

Plusieurs solutions :

- Il faut mettre la variable globale CheminFichier dans la section "shared" de la dll.
Brunews a des exemples VC++ dans ses sources.

- Utiliser le FileMapping pour créer une zone de mémoire partageable.

Voir aussi le bouquin de Richter :

http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip
Messages postés
32
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
19 juin 2007

Merci beaucoup pour ton coup de pouce!
J'ai finalement trouvé la solution grâce au sources de BruNews -> http://www.cppfrance.com/code.aspx?id=25238
Encore merci!!
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ah oui mais non ! Parce que moi j'ai déjà essayer de partager une
chaîne de caractère avec une section Shared :) et bien impossible à
faire :)

if(!Meilleur("Joky")) return ERREUR;<