大規模なアンマネージドC++ライブラリと大きなC#ライブラリで、シンマネージドC++ラッパーを開発しています。私はその大きなアンマネージドC++ライブラリに由来するエラーを捕らえ、それらをClr例外として再現する必要があります。私は、エラー・クラスからメッセージを抽出とCLR Stringクラスに変換するにはどうすればよい管理対象C++でアンマネージC++例外をキャッチする方法
try{
// invoke some unmanaged code
}
catch(Object*)
{
throw gcnew System::Exception("something bad happened");
}
:
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();
}
は、これまでのところ、私はこれが出ている:非管理ライブラリーでは、以下のクラスのインスタンスをスローします、私はそれをgcnew System :: Exception()コンストラクタに渡すことができますか? アンマネージドコードが何かをスローした場合、私のcatchブロックはそれをキャッチしますか?
編集:それは私が最も管理されていない例外をキャッチするために作ってみたrecommended in MCDN
'Error'のインスタンスがスローされている場合、なぜあなたは' Object * 'をキャッチしていますか?とにかくこの文脈では 'Object'とは何ですか? – ildjarn
@ildjarn:このオブジェクト*はMSDN –
でアドバイスされました。これはManaged Extensions for C++、C++/CLIには関係ありません。 2つの異なる言語で、 'gcnew'を使っているなら、C++/CLIを使っています。 – ildjarn