Как перехватить неуправляемое исключение C ++ в управляемом C ++

Я разрабатываю тонкую управляемую оболочку 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

11
задан Arne Lund 27 July 2011 в 20:26
поделиться