Comment arrêter l'exécution d'une DLL

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 7 nov. 2011 à 08:38
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 7 nov. 2011 à 15:32
Bonjour à tous,

Une question récurrente que je me pose et à laquelle mes recherches sur Google et CS n'ont pas permis d'y répondre.

Quand je développe une DLL ActiveX sous l'IDE de VB6, il y a toujours des tests d'erreurs comme dans toute DLL. Mon problème est que si je détecte une erreur, j'envoie un Msgbox et... je continue bêtement ma DLL au lieu d'arrêter, faute de savoir faire.

Dans VB on a souvent une erreur du style "Erreur..." avec 3 boutons Fin, Débogage et Aide. Sans aller jusque là car je crois que c'est l'IDE qui récupère cette erreur et afficher cette MsgBox, comment pourrais-je stopper toute exécution et non revenir dans mon soft appelant.

Merci d'avance pour vos réponses.


Calade

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
7 nov. 2011 à 10:05
Bonjour,

Je ne suis pas certain d'avoir bien compris.
Cette phrase, cependant :
comment pourrais-je stopper toute exécution et non revenir dans mon soft appelant

m'incline à te suggérer de faire retourner par la fonction une valeur significative d'erreur (exemple : 0) qui, au retour dans ton "soft", en provoquerait l'abandon.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
7 nov. 2011 à 10:27
Après relecture (mais sans toujours être certain du but recherché) :
Tu peux toujours également :
- prévoir un paramètre d'entrée supplémentaire pour ta fonction (le pid du process en cours, à savoir celui de ton appli appelante)
- dans ta fonction : tuer le processus ainsi relevé, puis quitter ta fonction.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 nov. 2011 à 13:44
Bonjour ucFoutu et merci de ta réponse,

C'est vrai que ce n'est pas très clair.
Ce que je cherche c'est à agir un peu comme l'IDE de VB6 en cas d'erreur.
Quand une erreur détectée par VB6 surgit, l'IDE afficher une MsgBox avec Fin, Débogage et Aide comme bouton.
Ce que j'aimerais c'est qu'à la détection d'une erreur (que je juge telle, pas une erreur VB bien sur) dans une DLL, avoir la même chose avec le débugguer (ce serait l'idéal) ou au moins stopper net mon appli.

Ton idée 1 consistant à renvoyer une erreur à mon appli ne me parait pas concluante car une telle erreur est gérée par ma DLL qui envoie un message d'erreur et il est pas toujours possible/facile de gérer une telle erreur dans l'appli utilisant cette DLL.

Par contre ton idée 2 est à piocher. Je vais regarder ça. Par Pid tu entends le hInstance de l'appli n'est-ce pas ?
Et si tu as une idée pour le bouton "Débogage", ce serait génial.


Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
7 nov. 2011 à 14:06
Non : pas possible en ce qui concerne le deboggage.
Te reste par contre l'autre idée.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 nov. 2011 à 14:09
OK, c'est pas très grave. Je teste et je tiens au courant.


Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
7 nov. 2011 à 14:33
ouais,
je modifie toutefois un peu l'idée :
- dans ta fonction : tuer le processus ainsi relevé, puis quitter ta fonction.

à transformer un peu, en
- dans ta fonction : msgbox (pour que l'utilisateur sache ce qui lui arrive, tout de même) puis tuer le processus ainsi relevé, puis quitter ta fonction.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 nov. 2011 à 14:56
Oui, ça j'avais deviné LOL.
Mais le problème est que dans la DLL, après cette MSgBox si je mets:
Msgbox(...)
TerminateProcess(GetCurrentProcess(), 0&)

Ca me tue AUSSI VB6, ce que j'aimerais éviter. Quant à utiliser App.Instance, c'est la même chose, la doc' dit qu'en debugging, on récupère celui de l'IDE de VB6.

Il est vrai que je me suis peut-être mal expliqué, c'est durant la phase de debug que ça me cause problème, pas en exécution réelle où de telles erreurs sont censés ne pas arriver.

Désolé pour n'avoir été plus clair.


Calade
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
7 nov. 2011 à 15:15
Tu veux dire que tu es encore en mode création et que ce que tu veux faire ne concerne pas l'exe ?
Ben alors ! Ce n"'est dans ce cs pas la deuxième solution, mais la première, qui est souhaitable (retour, par la fonction, d'une valeur "significative" qui, si présente, est à utiliser pour quitter la sub contenant l'appel à la DLL



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 234
7 nov. 2011 à 15:24
Si maintenant, tu as besoin de savoir si tu es (dans ton projet) en Run/IDE ou en EXE (de sorte à agir conditionnellement), c'est possible. Si tu as besoin d'un tel code, tu dis.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 nov. 2011 à 15:32
Non, pour ça je teste si GetModuleFileName() renvoie "VB6.EXE"

Jusqu'à maintenant, je n'ai pas eu de problème avec ça.

Merci quand même.


Calade
0