Zajmuję się tworzeniem cienkiego zarządzanego opakowania C++ w dużej niezarządzanej bibliotece C++ i dużej biblioteki C#. Muszę złapać błędy pochodzące z tej dużej niezarządzanej biblioteki C++ i ponownie je zgłosić jako wyjątki Clr. Niezarządzanego biblioteki rzuca instancji następujących klas:Jak wychwycić niezarządzanego wyjątek C++ w zarządzanym C++
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();
}
tej pory mają pochodzić z tego:
try{
// invoke some unmanaged code
}
catch(Object*)
{
throw gcnew System::Exception("something bad happened");
}
Jak wyodrębnić wiadomości z klasy Error i przekształcić ją w klasie Clr String , aby przekazać go do gcnew Konstruktor System :: Exception()? Jeśli niezarządzany kod rzuca coś innego, czy mój blok catch go złapie?
Edycja: używam catch (Object *), ponieważ jest to recommended in MCDN
Jeśli są zgłaszane instancje 'Error', dlaczego łapiesz' Object * '? A czym właściwie jest "Object" w tym kontekście? – ildjarn
@ildjarn: ten obiekt * był zalecany na MSDN –
Jest to istotne dla Managed Extensions dla C++, nie C++/CLI. Dwa różne języki i biorąc pod uwagę, że używasz 'gcnew', używasz C++/CLI. – ildjarn