AtlThrow не очень полезен, он генерирует CAtlException, который просто переносит код ошибки. Ошибка MapViewOfFile - это действительно исключительная проблема с низкоуровневым кодом ошибки, который совсем не говорит вам или вашему пользователю, что на самом деле пошло не так. Обработка ошибки почти всегда невозможна, вряд ли вы можете отмахнуться от нее и просто не использовать MMF. Вы должны будете зарегистрировать ошибку и завершить свою программу с очень общей ошибкой.
Получение очень подробных сообщений об ошибках, как правило, тратится впустую. «Ошибка вызова MapViewOfFile в методе MyClass :: DoSomething ()» просто ничего не значит для вашего пользователя или ее персонала поддержки. Отлично для вас, хотя, что-то, чтобы проследить ошибку. Но вы можете легко автоматизировать это, без проблем с локализацией, используя макросы __FILE__
и __LINE__
. Все, что вам действительно нужно, чтобы сопоставить ошибку с исходным кодом.
Сохраняйте сообщение об ошибке коротким и быстрым. В случае ошибок Windows вы захотите использовать FormatMessage (), чтобы Windows генерировала сообщение. Он будет автоматически локализован, текст сообщения стандартизирован и хорошо гуглит. Вывод из std :: exception - это нормально. Используйте строковые идентификаторы ресурсов для пользовательских сообщений, чтобы вы могли легко их локализовать. Решает проблему what () тоже.