1

我有这个问题:

从 开始Managed C++,我使用C# DLL我在其中注册delegate定义的地方Managed C++。库C#执行此操作delegate,并在其中引发一个native exception. 在调试模式下try/catch执行,但在发布模式下不执行。但在同样的场景中,如果异常是由 100% 托管代码抛出的,我可以捕捉到它。

这是我正在使用的代码:

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#用. delegate_ try/catchDebug中它可以,但在Release中,它不是。

//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 回答