À partir de la spécification MSDN, CloseHandle
lève une exception si un handle non valide lui est transmis lorsqu'il s'exécute sous un débogueur.Comment faire pour attraper l'exception de CloseHandle()
Depuis que je veux avoir du code propre, j'ai inséré du code pour l'attraper. Cependant, cela ne fonctionne pas, l'exception n'est pas prise en compte.
#include <windows.h>
#include <tchar.h>
#include <exception>
/* omitted code */
CloseHandle(myHandle); // close the handle, the handle is now invalid
try {
success = CloseHandle(myHandle);
} catch (std::exception& e) {
_tprintf(TEXT("%s\n"), e.what());
} catch (...) {
_tprintf(TEXT("UNKNOWN\n"));
}
Je reçois les deux erreurs du débogueur suivantes:
exception Première chance: 0xC0000008: Une poignée non valide a été spécifiée.
Exception non interceptée: 0xC0000008: un handle non valide a été spécifié.
Je pense que l'exception de la première chance est normale, car elle est déclenchée avant que l'instruction catch ne l'obtienne. Cependant, l'exception non interceptée me fait me demander ce qui ne va pas ici.
Si cette exception est toujours levée, même si vous avez __try/__ sauf, vous avez probablement activé cette exception. Aller au menu Déboguer/Exceptions/Win32 Exceptions et désactiver l'option c0000008 Un handle non valide a été spécifié. Après avoir interrompu OK pour Visual Studio, arrêtez. – user720594