【问题标题】:ASSERT(AfxGetThread() == NULL); fails断言(AfxGetThread() == NULL);失败
【发布时间】:2013-12-02 15:07:39
【问题描述】:

我目前正在通过用功能区替换菜单栏来改造一个旧项目。我创建了一个框架等,但我在这一行的 appcore.cpp 中得到断言失败:

断言(AfxGetThread() == NULL);

根据我最近的阅读,构造函数一定有问题。

指出我删除了 Doc 和 View 类可能是件好事。但我在某处读到它不应该是一个问题:/ 有人帮忙吗?

【问题讨论】:

    标签: c++ mfc assertions


    【解决方案1】:

    删除 Doc 和 View 类可能会破坏一些底层框架代码。您可能应该从头开始,使用应用程序向导创建您想要的新框架,然后将“旧”代码移植到其中。

    【讨论】:

    • 我想我替换了与他们相关的所有内容。我找到了问题:CWinAppEx m_waeApp; m_waeApp.InitInstance(); //这里它坏了,所以我猜m_waeApp的构造函数有问题。如果我尝试 CWinAppEx::InitInstance();并继续使用 F10 进行调试,我在这里结束: if ( !managedapp ) exit(mainret); //在文件crt0.c中。它只是退出而没有错误:/
    • 你不能自己调用​​InitInstance。框架启动时调用它。
    • 但是...我从一个工作示例中调用它(使用向导创建):/
    • 我的意思是 CWinAppEx::InitInstance();在此之前,其他开发人员使用 CWinAppEx m_waeApp; m_waeApp.InitInstance();它一直工作到现在o.O
    • 我添加了一个文档和一个视图。现在我面临另一个问题,又是一个断言: CString strTitlePane1; CString strTitlePane2; bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);断言(bNameValid); bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);断言(bNameValid); //它在第一个断言上中断(如果我只删除第一个断言,我想它与第二个相同)。现在,当我指向 LoadString 函数时,提示是#define LoadString LoadStringA。在提到的工作版本中,它是#define LoadString LoadStringW。这与问题有什么联系吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多