应用程序关闭时CLI DLL中无法解释的崩溃

时间:2015-03-02 16:52:03

标签: crash singleton c++-cli

我有一个CLI DLL(混合纯C ++和托管代码,VS2005),我加载到C#应用程序中。一切正常,但是当C#应用程序关闭时(单击主窗体标题栏中的小“X”按钮),应用程序崩溃时会显示一条消息,告诉我“未知软件异常”(0xC0020001)< / strong>发生在地址07C812AEB。消息的标题是“.NET BroadcastEventWindow.2.0 .....”

无法找到原因,因为Visual Studio调试器不会在崩溃位置停止。

当我将应用程序加载到OllyDebug时,它向我显示崩溃可能发生在mscorwks.dll中。

我使用由#pragma managed#pragma unmanaged分隔的纯C ++类和混合类。

可能是什么原因?

1 个答案:

答案 0 :(得分:2)

行。最后,我减少了我的DLL中的代码,直到我不再发生任何崩溃。我结束了几个课程,我找到了罪魁祸首。

我发现的是如此奇怪,没有任何逻辑,我必须在这里发布我的结果。

在其中一个纯C ++类(不包含任何托管代码)中,我在头文件中使用 singleton

inline static CMyClass& Instance()
{
    static CMyClass i_Inst;
    return i_Inst;
};

当应用程序退出导致崩溃时,此处出现任何问题。

当我删除单例并将类作为全局变量在CPP文件中实例化时,如:

CMyClass gi_Instance;

崩溃消失了!

我看不出我的Singleton会出现什么问题。我想这是一个Visual Studio错误。

注意:我也在纯C ++ DLL中使用相同的Singleton相同的类,没有问题。只有在CLI项目中编译时才会出现问题。

注意2:当我在CMyClass的析构函数中放置OutputDebugString(L"Destructor CMyClass");时,只要我使用Singleton,我就永远不会在Trace中看到该消息。使用全局变量,可以正确调用析构函数。