0

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

启动并完美运行,但是当我退出应用程序时,就像窗口消失一样,我得到一个对话框,说可执行文件已停止工作。单击调试,选择已随项目打开的 VS2010,然后出现另一个对话框,说明可执行文件已停止工作。当我在那个上单击“调试”时,我得到另一个对话框,上面写着“调试器已附加但未配置为调试此未处理的异常。从 .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 ),其标题为FIX: Faulting module name: clr.dll error message when you run基于 Microsoft .NET Framework 4 的应用程序。这似乎表明我的应用程序现在正在构建为 .NET 应用程序,这不是本意。

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

4

0 回答 0