2010-11-09 4 views
0

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

+1

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. –

+0

@ Matthieu M .: Soumettez-le comme votre réponse, et je l'accepterai. –

Répondre

2

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.

+0

+1 me battre :) :) – egrunin

+0

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. –

2

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,

+0

Etes-vous sûr que cela fonctionne si la DLL charge et décharge plusieurs fois? –

+0

@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. –

+0

merci, je ne sais vraiment pas à quel point cela fonctionnerait moi-même. –

Questions connexes