Lorsque ma DLL MFC est chargée, une classe est instanciée dans dllmain
. Comment puis-je libérer les ressources allouées pour cela lorsque la DLL est déchargée ou que son processus est terminé? Est-ce que cela sera fait automatiquement par le système? J'utilise Visual Studio 2008. Merci.Comment libérer des ressources lorsque la DLL est déchargée ou que le processus se termine
Répondre
dans votre fonction principale dll gérer juste un cas pour le DLL_PROCESS_DETACH.
BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved) {
switch (dwReason) {
case DLL_PROCESS_DETACH:
// the dll is being detached, do you clean up here
break;
}
}
Gardez à l'esprit que certaines choses ne sont pas possibles à l'intérieur de DllMain(), de sorte que vous voulez garder ce yo y faire très rapide et simple.
+1 me battre :) :) – egrunin
Merci. Cela ressemble à une bonne solution, mais mon point d'entrée DLL ressemble à ceci: 'int _tmain (int argc, TCHAR * argv [], TCHAR * envp [])'. Il s'agit d'une DLL MFC générée dans Visual Studio 2008 en accédant à Nouveau projet -> Projet Win32 -> et en sélectionnant DLL, Extensions et MFC comme options. –
Remplacez votre new
-ing et le stockage du pointeur dans la variable globale T*
, avec une variable globale T
.
Cela permet aux machines automatiques C++ de faire le travail pour vous. Lors du déchargement DLL, le destructeur est appelé automatiquement. Remarque: prendre en charge le chargement et le déchargement des DLL à partir de plusieurs threads peut s'avérer plus difficile.
Vive & HTH,
Etes-vous sûr que cela fonctionne si la DLL charge et décharge plusieurs fois? –
@Steve: on ne peut jamais garantir qu'il n'y a pas encore un autre bug dans Visual C++ (et cela dépend du compilateur, le C++ Holy Standard n'a rien à dire sur les bibliothèques dynamiques). Donc, si c'était un problème, je le testerais. Bon point. –
merci, je ne sais vraiment pas à quel point cela fonctionnerait moi-même. –
- 1. comment libérer des ressources d'un processus
- 2. Libérer des ressources d'application
- 3. Comment libérer toutes les ressources d'un processus?
- 4. Comment finit le processus fils lorsque le processus parent se termine en C#
- 5. Exécuter le code lorsque le processus en cours se termine?
- 6. Comment pouvez-vous obtenir une DLL à supprimer lorsque son processus propriétaire se termine?
- 7. Le processus Python ne se termine pas
- 8. Ecriture en sortie de Java JNI DLL - la sortie n'apparaît que lorsque l'application se termine
- 9. Est-il possible d'empêcher zend engine de libérer des ressources?
- 10. C# - Le processus ne se termine pas
- 11. intégrée des ressources manquantes dans Visual Studio 2010 lorsque le nom se termine par « No.xxx »
- 12. Comment savoir quand le processus se termine sous Linux?
- 13. Comment libérer le processus Excel?
- 14. Comment annuler AsyncTask lorsque l'activité se termine?
- 15. Attendez que le programme se termine
- 16. Comment exécuter l'action jquery uniquement lorsque le précédent se termine
- 17. Comment libérer des ressources utilisées par HttpPostedFileBase?
- 18. indiquant quand un processus execl() se termine
- 19. Libérer le processus dans Eclipse
- 20. Démarrer le processus asynchrone et attendre qu'il se termine
- 21. Application WPF, libérer des ressources (images)
- 22. Masquer span (ou div) jusqu'à ce que javascript se termine
- 23. Code de réponse lorsque le POST ne se termine pas
- 24. SharePoint Workflow se termine prématurément lorsque l'événement onWorkflowItemChanged est atteint
- 25. comment libérer l'objet de la partie dll?
- 26. en utilisant spawnl et en attendant que le processus fils se termine
- 27. Quelle méthode est appelée lorsque l'application iPhone se termine?
- 28. Sortie NSThread lorsque l'application se termine
- 29. Pourquoi le sous-processus.Popen n'attend pas jusqu'à ce que le processus fils se termine?
- 30. barre de progression (image GIF animée) lorsque la page se charge ou que le processus d'arrière-plan se poursuit ::
En ce qui concerne cette question. Est pas ce que la norme 'atexit' fonction est faite pour? Je sais que la norme ne parle pas de dll, donc je parle plutôt du comportement du compilateur par rapport à cette méthode. –
@ Matthieu M .: Soumettez-le comme votre réponse, et je l'accepterai. –