4

C++/CLI ラッパー ライブラリを使用して C# アプリから呼び出される C++ ライブラリがあります。C++ コードでは、何か問題が発生したときに例外をスローしたいと考えています。管理された世界では SEHException に変換されます。ただし、元の例外に当然含まれていたメッセージはなくなりました。

このメッセージを C# に伝達するにはどうすればよいですか?

  • たとえば、メッセージのマーシャリングMyCppExceptionに翻訳されるように、何らかの方法で翻訳を設定できますか?MyManagedException
  • SEHException にメッセージが含まれるような方法で例外をスローすることはできますか?

すべての C++/CLI ラッパー関数で例外をキャッチし、可能であれば再スローする必要は避けたいと考えています。

// C++ cpp.h
class MyException { const char* what() const { return "OH HI THERE"; } };
MyException e;
void throw_function()
{
    throw e;
}

// Wrapper
#include "cpp.h"
public ref class A
{
public:
    static Throw() { throw_function(); }
}

public ref class E: public Exception
{
    System::String^ GetMessage();
}    

// App.cs
try
{
    A.Throw()
}
catch (E e)    
{
    Console.WriteLine(e.GetMessage()); // I would like to do something like this...
}
catch (SEHException seh)
{
    Console.WriteLine(seh.Message); // Or this...
}
4

0 に答える 0