J’ai un .exe (une fenêtre) qui tourne donc avec quelque part une boucle :
while( GetMessage( &message, NULL, 0, 0))
{
TranslateMessage( &message );
DispatchMessage( &message );
}
et qui récupère quelque part dans une CALLBACK les messages WM_COMMAND.
Parmi mes messages WM_COMMAND, j’ai en particulier les deux suivants :
1.- un message (case message1 :) qui exécute une fonction 1 dans une DLL,
je passe sur le détail du chargement de la DLL, retenons simplement qu’après son chargement j’ai simplement :
fonction1dll() ;
suivi du break; habituel
2.- un autre message (case message2) qui exécute une fonction 2 dans la même DLL,
j’ai donc sous un autre (case message2:) l’appel de la fonction 2 :
fonction2dll() ;
toujours suivi du break; habituel
voilà pour ma fenêtre en .exe
Pour ce qui concerne ma dll :
Ma fonction 1 exécute un HOOK et se met à boucler volontairement pour récupérer par sa propre CALLBACK les messages des évènements piégés sur une boucle du style :
while( (GetMessage( &messdll, NULL, 0, 0))&&(runhook))
{
TranslateMessage( &messdll );
DispatchMessage( &messdll );
}
avec runhook initialisé à true.
Ma fonction 2 ne fait elle aucune boucle, elle a pour but d’arrêter le HOOK lancé par la fonction 1 et de stopper la boucle de la fonction 1. Ma fonction 2 se contente donc simplement de faire le UnHook nécessaire puis de faire passer runhook à false ce qui on le voit permet de sortir de la boucle GetMessage de la fonction 1.
Comportement de l’ensemble :
Quand je lance la fonction 1 tout se passe comme voulu :
Le hook de la DLL s’exécute correctement et en parallèle je peux continuer à utiliser le .exe de ma fenêtre pour exécuter d’autres commandes (bien noter cependant que je ne suis toujours pas revenu sur le break; qui suit l’appel à la fonction 1).
Quand je lance la fonction 2 le hook s’arrête comme prévu, je reviens bien sans problème sur le break ; qui suit l’appel de la fonction 2, mais en parallèle comme la fonction 1 sort de sa boucle interne je reviens aussi sur le break; qui suit la fonction 1 et c’est là qu’il y a un problème : ceci tue mon .exe donc ma fenêtre ce qui n’était pas le but recherché !!
J’espère avoir été clair dans mes explications, ce problème est-il résoluble ?
Merci