未处理的异常 - 如果 /SUBSYSTEM 参数更改,则访问冲突

Posted

技术标签:

【中文标题】未处理的异常 - 如果 /SUBSYSTEM 参数更改,则访问冲突【英文标题】:Unhandled Exception - Access violation if /SUBSYSTEM parameter is changed 【发布时间】:2014-04-10 07:02:42 【问题描述】:

我有一个应用程序,在其中我使用console 来查看正在输出的一些值。现在一些要求已经改变,我在运行时不再需要console

我尝试通过将Project Properties->Linker->System->Subsystem 下的Project Properties->Linker->System->Subsystem 参数从Console 切换到Windows 来改变这一点,就像我在之前的事情上所做的那样,它已经奏效了。

在这种情况下,它在mfc110u.dll 中给了我一个未处理的异常,因为无法实例化该对象。

为什么会出现这个异常,还有什么方法可以关闭正在运行的程序的console?我使用VS2012 作为开发环境。

【问题讨论】:

根据我的经验,当您在 mfc110u.dll 中遇到异常时,错误是在其他地方生成的。 是的,我很确定它不在MFC 中,如果 Subsystem 参数是“Console”,该项目可以正常工作,但如果我将其更改为“Windows”则无法正常工作。我想知道是什么,如果有的话,可能会导致这种情况。根据我的阅读,这会影响程序的入口点,并且在 DLL 中也有所反映,因为对象没有被实例化。那么该怎么办.. 只要使用调试器!你甚至可以调试发布程序 是的,这就是问题所在。它编译,但运行失败,因为有一个未处理的异常,因为一个对象没有被实例化。 MFCCreateInstance() 调用中失败,或者在附近。这可能是非常愚蠢的事情,但我不希望控制台在应用程序运行时出现。通过将参数从Windows 切换到Console,我曾通过另一个应用程序调出控制台一次。我认为如果我不想要它,同样可以反过来工作。但它给出了未处理的异常。 【参考方案1】:

如果您不需要控制台,请声明一个 winmain。这是非unicode版本

#include <windows.h>
#include <iostream>
#include <cstdio>

int main (int, char**);

// If we just start with main, we will always get a console window
int WINAPI WinMain (
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
) 

    int argc = __argc;
    char** argv = __argv;
#ifdef DEBUG
  // If we are running in debug mode, open a console window
    AllocConsole();
    freopen("conin$", "r", stdin);
    freopen("conout$", "w", stdout);
    freopen("conout$", "w", stderr);
#endif

    return main (argc, argv);


int main (
    int argc,
    char** argv
)

    MessageBox(NULL, "Whoo hoo", "It Works!!!", MB_OK);
    return 0;

【讨论】:

这应该是解决方案:Windows 程序有不同的入口点,称为 WinMain。如果您使用 FrameWork,例如 MFC,则它嵌套在某处。 啊,好的。我不明白这个机制。现在明白了。非常感谢。

以上是关于未处理的异常 - 如果 /SUBSYSTEM 参数更改,则访问冲突的主要内容,如果未能解决你的问题,请参考以下文章

应用程序引发了未处理的异常。 System.ArgumentNullException:值不能为空。 (参数'uriString')

未处理的异常:将无效参数传递给认为无效参数致命的函数。在插入排序中[重复]

`未处理的异常:无效的参数:'_$_Category'的实例`在将数据发送到firestore时形成一个冻结的生成类

获得未处理的异常:System.ArgumentNullException

toJson 无法正常工作 json 序列化程序未处理的异常:无效参数:“DietMo​​del”的实例

MFC ODBC SQLConfigDataSource() 未处理的异常