Я разрабатываю тонкую управляемую оболочку C ++ над большой неуправляемой библиотекой C ++ и большой библиотекой C #. Мне нужно перехватывать ошибки, возникающие в этой большой неуправляемой библиотеке C ++, и повторно выдавать их как исключения Clr. Неуправляемая библиотека создает экземпляры следующего класса:
Error::Error(const std::string& file, long line,
const std::string& function,
const std::string& message) {
message_ = boost::shared_ptr(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