I am developing a thin managed C++ wrapper over a large unmanaged C++ library, and a large C# library. I need to catch errors originating in that large unmanaged C++ library, and rethrow them as Clr exceptions. The unmanaged library throws instances of the following class:
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();
}
So far I have come up with this:
try{
// invoke some unmanaged code
}
catch(Object*)
{
throw gcnew System::Exception("something bad happened");
}
How do I extract the message from Error class and convert it to the Clr String class, so that I can pass it to gcnew System::Exception() constructor? If the unmanaged code throws something else, will my catch block catch it?
Edit: I am using catch(Object*) because that is recommended in MCDN
Error
are being thrown, why are you catchingObject*
? And what isObject
in this context anyway? – ildjarngcnew
, you're using C++/CLI. – ildjarnObject*
. The only thing it says aboutObject*
is a warning that it doesn't work right. – Mooing Duck