Estoy desarrollando un contenedor de C++ administrado fino sobre una gran biblioteca de C++ no administrada y una gran biblioteca de C#. Necesito detectar los errores que se originan en esa gran biblioteca C++ no administrada, y volver a lanzarlos como excepciones Clr. La biblioteca no administrado lanza instancias de la clase siguiente:Cómo atrapar la excepción de C++ no administrada en C++ administrado
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();
}
Hasta aquí he llegado con esto:
try{
// invoke some unmanaged code
}
catch(Object*)
{
throw gcnew System::Exception("something bad happened");
}
¿Cómo extraer el mensaje de la clase de error y la convierten en la clase Clr Cadena , para poder pasarlo al nuevo constructor System :: Exception()? Si el código no administrado arroja algo más, ¿atrapará mi captura?
Editar: Estoy utilizando la captura (Object *), ya que es recommended in MCDN
Si se lanzan instancias de 'Error', ¿por qué atrapa' Objeto * '? ¿Y qué es 'Object' en este contexto de todos modos? – ildjarn
@ildjarn: este objeto * se notificó en MSDN –
Esto es relevante para las Extensiones administradas para C++, no para C++/CLI. Dos idiomas diferentes, y dado que está usando 'gcnew', está usando C++/CLI. – ildjarn