VS2010 C ++非托管编译为托管 - 退出时CLR.dll崩溃

时间:2015-11-03 14:07:40

标签: c++ visual-studio-2010 clr memory-access

我正在开发VS2010中的非托管C ++项目。该项目最初是作为Windows控制台应用程序创建的(/ SUBSYSTEM:CONSOLE,预处理器定义为_CONSOLE,使用_tmain()作为入口点)。我已将其更改为窗口应用程序,以便为接口提供更多功能(/ SUBSYSTEM:WINDOWS,预处理器定义_WINDOWS,使用_tWinMain()作为入口点。)

启动并运行完美,但是当我退出应用程序时,就像窗口消失一样,我得到一个对话框,说可执行文件已停止工作。单击Debug,选择已经与项目一起打开的VS2010,然后得到另一个对话框,说可执行文件已停止工作。当我单击那个上的Debug时,我得到另一个对话框说"调试器被附加到但没有配置为调试这个未处理的异常。从.NET Framework v4.0代码"。

中抛出了未处理的异常

注意:只有通过双击应用程序图标将应用程序作为发布版本运行时,才会发生此崩溃。当我在VS2010 IDE中运行时,它会正常退出。

我觉得很奇怪,因为我的项目使用标准的Windows库定义为Win32。所以我查看了系统的错误日志,发现我的可执行文件的错误如下:

错误应用程序名称:,版本:1.0.0.1,时间戳0x5638a404 错误模块名称:clr.dll,版本:4.0.30319.34014,时间戳:0x52e0b784 异常代码:0xc0000005

查看此内容并发现CLR.dll是.NET管理的。我不确定为什么我的应用程序现在正在使用它。查看我的项目属性并且看不到任何对它的引用,所以我假设当我更改为SUBSYSTEM:WINDOWS或预处理器_WINDOWS或两者时,它必须已作为要求包含在内。

然后我查了一下文字""并找到以下链接(https://support.microsoft.com/en-us/kb/2640103),当您运行基于Microsoft .NET Framework 4的应用程序时,其标题为 FIX:错误模块名称:clr.dll错误消息。这似乎指向我的应用程序现在被构建为.NET应用程序,这不是意图。

任何人都可以告诉我为什么我在运行可执行文件时访问CLR.dll?为什么我的应用程序在以前没有这样做的情况下被构建为.NET 4?此时我不知道如何找出它为什么会抛出访问错误,但我认为它是因为应用程序没有编码来处理.NET 4。

0 个答案:

没有答案