Мда... Невесело... Ведь такой глюк проявляется при попытке перехватить исключение любого класса производного от EExternal - то есть всех исключений, которые возбуждаются операционной системой. Вот ещё пример для EAccessViolation (который, само-собой, работает неправильно):
Код:
{
__try
{
int* p = NULL;
*p = 0x1234;
}
catch(const EAccessViolation &E)
{
if (E.ExceptionRecord)
ShowMessage(IntToHex((int)E.ExceptionRecord->ExceptionAddress,8));
else ShowMessage("ExceptionRecord is NULL!");
}
}
Так что для любых классов исключений, производных от EExternal, ни вывести оригинальное сообщение об ошибке, ни, тем более, адрес этой ошибки, похоже нельзя никак... Обидно...
p.s.: тех программеров, чьи светлые головы посетила идея использовать ExceptObject и ExceptAddr, спешу успокоить -- мою голову она посетила раньше. Что бы много не писать, скажу просто - НЕ работает (и ExceptAddr, и ExceptObject равно NULL).