J'ai développé une application ATL console et je veux piéger la fermeture ?, quitter?, Terminer? événement afin que je puisse fermer les fichiers journaux et effectuer un nettoyage général à la sortie.Arrêter proprement une application ATL
Comment puis-je intercepter l'événement 'terminate' qui résulterait de quelqu'un terminant le .exe dans le gestionnaire de tâches?
EDIT:
Il est une application console, j'ai joint la classe principale. Pourriez-vous éventuellement indiquer où et comment utiliser SetConsoleCtrlHandler
?
// Override CAtlExeModuleT members
int WinMain(int nShowCmd) throw()
{
if (CAtlBaseModule::m_bInitFailed) //ctor failed somewhere
{
ATLASSERT(0);
return -1;
}
HRESULT hr = S_OK;
LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
if(ParseCommandLine(lpCmdLine, &hr))
{
if(SUCCEEDED(RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE)))
{
CComPtr<IRORCAdapterMain> pAdapter;
if(SUCCEEDED(pAdapter.CoCreateInstance(L"RORCAdapter.RORCAdapterMain")))
{
if(SUCCEEDED(pAdapter->StartAdapter()))
{
MSG msg;
while(GetMessage(&msg, 0, 0, 0))
DispatchMessage(&msg);
}
}
RevokeClassObjects();
}
}
Votre question est en fait à propos de ATL , pas C++; pensez à changer le titre de votre question ... –
** ** Vous avez une pompe de message là, quand vous obtenez un WM_QUIT, vous devez quitter la boucle while. Vérifiez également la documentation de GetMessage car votre boucle de message a un bug possible. –
Dukeling