Я разрабатываю тонкую управляемую С++-оболочку над большой неуправляемой библиотекой С++ и большую библиотеку С#. Мне нужно ловить ошибки, возникающие из этой большой неуправляемой библиотеки С++, и реконструировать их как исключения Clr. Неуправляемая библиотека выдает экземпляры следующего класса:
Error::Error(const std::string& file, long line,
const std::string& function,
const std::string& message) {
message_ = boost::shared_ptr<std::string>(new std::string(
format(file, line, function, message)));
}
const char* Error::what() const throw () {
return message_->c_str();
}
До сих пор я придумал следующее:
try{
// invoke some unmanaged code
}
catch(Object*)
{
throw gcnew System::Exception("something bad happened");
}
Как извлечь сообщение из класса Error и преобразовать его в класс Clr String, чтобы я мог передать его в конструктор gcnew System:: Exception()? Если неуправляемый код выбрасывает что-то еще, будет ли мой блок catch поймать его?
Изменить: я использую catch (Object *), потому что это рекомендуется в MCDN