begin process at 2012 05 29 21:53:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Problème de retour de dll sous l’API32


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de retour de dll sous l’API32

vendredi 4 mars 2011 à 06:58:30 | Problème de retour de dll sous l’API32

ArthurAuguste

Membre Club
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
mercredi 9 mars 2011 à 09:16:38 | Re : Problème de retour de dll sous l’API32

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

Oui, PeekMessage() ou le multithreading.

@++
mercredi 9 mars 2011 à 15:16:15 | Re : Problème de retour de dll sous l’API32

ArthurAuguste

Membre Club
Merci pour la réponse, mais entre-temps j'ai trouvé, j'avais fait l'erreur suivante:
ci-après le point d'entrée de la fonction 1 dans ma dll:
extern "C" __declspec(dllexport) DWORD WINAPI SetHook(LPVOID lpParameter)
ci-après le point d'entrée de la fonction 2 dans ma dll:
extern "C" __declspec(dllexport) BOOL WINAPI StopHook()
ci-après l'appel de ma fonction 1 dans le programme principal:
dllEntryAdd1();
ci-après l'appel de ma fonction 2 dans le programme principal:
dllEntryAdd2();
Je pensais à tort que le paramètre (LPVOID lpParameter) qui n'était pas utilisé ne gênait pas, en fait ma fonction 1 s'exécutait normalement mais c'est seulement au moment où elle se terminait et où elle revenait dans le programme principal que le fait de l'avoir appelée sans paramètre alors qu'elle en attendait un, provoquait un décalage dans la pile qui me plantait mon programme principal. Donc grossière erreur!
Correction:
Nouveau point d'entrée de la fonction 1 dans ma dll:
extern "C" __declspec(dllexport) DWORD WINAPI SetHook()


Cette discussion est classée dans : message, problème, fonction, boucle, dll


Répondre à ce message

Sujets en rapport avec ce message

exécuter une fonction en arrière plan [ par sena ] Bonjour,kelk'un aurait - il un exemple simple d'exécution d'une fonction en arrière plan !Car la solution 1 ne fonctionne évidemment pas, car la fonct Problème de boucle dans un muli-thread [ par vinvay ] Alors voila, j'ai 4 threads qui tournent en même temps, ceux-ci utilisant la même fonction.Dans cette fonction, il y a une première boucle for suivie importer une fonction depuis un dll externe [ par Rabbi Jakob ] Bonjour,Je programme en c++ sous visual studio 2005J'ai un petit problème avec ma dll Je dispose d'une dll avec son fichier .lib. Je les ai mis tous l TCppWebBrowser dans une DLL [ par norton ] Bonjour à tous, je développe une application qui utilise le composant TCppWebBrowser.Jusque la aucun problème mais des que j'appelle la fonction LoadF problème dans un chat(lignes vides et serveur relancé) [ par djipey ] Bonsoir. Voila je code un chat, mais je suis confronté à plusieurs problèmes: 1-mon chat récupère d'abord l'ip du client(j'ai des projets quant à cet dll [ par wasaikos ] salut à tous,j'ai une grande question!!j'aimerais savoir comment appeler une fonction membre d'une classe d'une dll.j'utilise windev 11 et le problème Compatibilité DLL [ par cherwam07 ] BonjourJ'aurai besoin de votre aide sur un problème concernant les DLL.Je travail en C, j'ai créé une DLL avec devc++.Donc quelque chose comme :dll.h# [mfc c++] evenement entre une dll et un exe [ par wogkiller ] Bonjour,j'ai un programme qui charge dynamiquement des dll, et qui communiquent avec elles en appelant des méthodes dans le sens exe->dll, et qui norm Problème hooking [ par Albanderuaz ] Bonjour !Alors voilà j'ai un petit problème lors de l'installation d'un hook pour faire du subclassing. J'injecte un DLL dans un processus et il doit Client UDP dans dll WinCE [ par underdog08 ] Bonjour tout le monde,J'ai recemment réalisé un client udp en mfc qui fonctionne et je doit maintenant l'intégrer dans une dll wince et je rencontre u


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales