J'essaie actuellement de créer un gestionnaire d'exceptions intégré à mon service Windows qui, lors d'une exception non gérée, envoie un message à un autre programme. J'ai construit la méthode et ai fait fonctionner la communication, mais il semble que chaque fois que mon programme lance l'erreur, (j'ai un appel de relance dans le code pour le forcer.) Windows l'attrape à la place et le gestionnaire n'est pas appelé. Quelqu'un peut-il expliquer ce que je fais de mal?ExceptProc n'est pas appelé dans Windows
code simplifié pour expliquer:
procedure unhandled();
begin
raise Exception.Create('Unhandled');
end;
procedure ExceptionHandler(ExceptObject: TObject; ExceptAddr: Pointer);
begin
WriteLn('Display: ' + Exception(ExceptObject).Message);
//send Message Here
end;
J'appelle ce code pour l'exécuter:
WriteLn('Starting');
ExceptProc := @ExceptionHandler;
unhandled();
Je pense que la sortie soit:
À partir
Affichage: Non manipulé
mais tout ce qu'il ne fait qu'afficher:
À partir
Puis fenêtres retourne une invite de commande après environ 5 secondes.
Pourquoi le gestionnaire n'est-il pas correctement appelé?
P.S. J'ai exécuté ces tests dans une application de console pour tester.
EDIT:
Voici quelques plus d'informations:
Apparemment, lorsque vous avez un ExceptProc affecté, votre programme ne devrait pas jeter l'erreur d'exécution 217 normale. Je devine que c'est ce que Windows attrape, De ce que je peux voir cependant, mon programme jette cette erreur d'exécution, et je ne peux pas obtenir un ErrorProc pour l'attraper non plus.