1

私はこの問題を抱えています:

から、で定義されたを登録する場所Managed C++を使用します。ライブラリはこれを実行し、その中で。を発生させます。デバッグモードではが実行されますが、リリースモードでは実行されません。しかし、同じシナリオで、例外が100%マネージコードによってスローされた場合、私はそれをキャッチできます。C# DLLdelegateManaged C++C#delegatenative exceptiontry/catch

これは私が使用しているコードです:

Managed C++

class CNativeClass
{
    public:
      int one;
}

// This C method is registred like Delegate in C#
void OnMsgReceived(ManagedObjectInCSharp^ obj)
{
    CNativeClass* pelota;
    pelota->one = 0; // <-- This procude a NullPointerException
    Console::WriteLine(L"OnMsgReceived");
}

私はこれを。でC#実行します。デバッグでは問題ありませんが、リリースは問題ありません。delegatetry/catch

//But if I defined the method like this:
void OnMsgReceived(ManagedObjectInCSharp^ obj)
{
    try  
    {
        CNativeClass* pelota;
        pelota->one = 0; // <-- This procude a NullPointerException
        Console::WriteLine(L"OnMsgReceived");
    }
    catch(const char* str)
    {
    }
}

C#リリースモードで例外をキャプチャします。

4

1 に答える 1

0

わかりました、おそらくこれはロング ショットですが、この属性を C# メソッドに追加してみてください。

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]

http://msdn.microsoft.com/en-us/magazine/dd419661.aspx

于 2012-10-10T20:11:14.447 に答える