Variable pour un hook

ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007 - 30 janv. 2006 à 12:53
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 30 janv. 2006 à 16:06
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
30 janv. 2006 à 13:07
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
0
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007
30 janv. 2006 à 13:37
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!!
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
30 janv. 2006 à 16:06
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;<
0
Rejoignez-nous