Вам просто нужно перехватить все исключения на верхнем уровне. Обычно этого будет достаточно:
try {
//do stuff
} catch( std::exception& e ) {
// log e.what() here
} catch( YourCustomExceptionHierarchyRoot& e) {
// Perhaps you have smth like MFC::CException in your library
// log e.MethodToShowErrorText() here
} catch( ... ) {
// log "unknown exception" here
}
вам нужно будет сделать это на верхнем уровне вашей программы (что-то вроде main ()).
Кроме того, если вы реализуете COM-методы, вам придется делать то же самое для каждого фрагмента кода, доступного для COM - выброс исключений через границы COM недопустим.