Jusqu'à présent, je n'avais jamais vraiment besoin de l'application Winapp ExitInstance() d'une grande application MFC (Single Document Interface si c'est important) sur laquelle je travaille. Mais maintenant je le fais, principalement pour nettoyer les alocations de mémoire, décharger quelques DLL, etc. Eh bien, j'ai vite appris par les fuites de mémoire évidentes et telles que ExitInstance n'a pas été appelé. Ai-je manqué quelque chose d'évident? Dois-je ajouter manuellement quelque chose à la carte des messages pour m'assurer que mon override ExitInstance est appelé?ExitInstance non appelée dans l'application MFC
Je suppose que je peux faire mon nettoyage ailleurs, mais c'est le meilleur endroit si je peux le faire fonctionner. Intéressant, j'ai trouvé quelques exemples de ceci en tapant des chaînes comme "ExitInstance jamais appelé" et tel dans Google, et en aucun cas de vraies réponses offertes. L'application se ferme normalement lorsque quelqu'un clique sur la case de fermeture ou sur la touche "Quitter" du menu Fichier, et la fonction OnClose() de la fenêtre mainframe est toujours appelée. J'ai même essayé de forcer des choses en mettant AfxGetMainWnd() -> DestroyWindow(); dans cet événement OnClose() mainframe, mais je ne parviens toujours pas à exécuter ExitInstance(). Peut-être que c'est juste une grosse fonction fictive? Ou peut-être Je suis juste un gros mannequin? :-)
Si votre application est dérivée de CWinApp, ExitInstance doit toujours être appelée. Si ce n'est pas le cas, cela n'est peut-être pas déclaré correctement ou votre application est terminée prématurément pour une raison quelconque. – humbagumba
Je sais qu'il devrait, mais il ne le fait pas, même quand theres pas s'exécute, pas de hits, pas d'erreurs, et l'application se ferme avec le code 0. Wierd. Dois-je ajouter quelque chose à la carte des messages? Est-ce important si mon override ExitInstance() est également virtuel (ne devrait pas importer). Dois-je ajouter quelque chose à la carte de message pour m'assurer qu'elle est appelée? – Randy
"Est-ce important si mon override ExitInstance() est aussi virtuel (ne devrait pas importer)." Cela n'a pas d'importance, car une fonction virtuelle surchargée est toujours virtuelle, que vous la marquiez comme telle ou non. –