Jak uzyskać nazwę i/lub opis wyjątku SEH bez konieczności sztywnego kodowania ciągów znaków w aplikacji?Jak uzyskać nazwę/opis wyjątku?
Próbowałem użyć FormatMessage()
, ale obcina wiadomość czasami, nawet jeśli podasz ignorować wkładki:
__asm { // raise access violation
xor eax, eax
mov eax, [eax]
}
Wywołuje wyjątek z kodem 0xC0000005 (EXCEPTION_ACCESS_VIOLATION)
.
char msg[256];
FormatMessageA(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
GetModuleHandleA("ntdll.dll"), 0xC0000005,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msg, sizeof(msg), NULL);
Wypełnia msg
ze ściętego wyrażenie: "The instruction at 0x
".
Wow to naprawdę wygląda na zepsute. Działa dla różnych wiadomości, ale nie mogę go uruchomić dla STATUS_ACCESS_VIOLATION na całe życie. – Charlie
Jestem trochę zardzewiały, ale czy próbowałeś FORMAT_MESSAGE_FROM_SYSTEM? – morechilli
morechilli: Tak, próbowałem już, ale to nie zmienia wyniku. – Sascha