【问题标题】:DoModal() asserts at very first lineDoModal() 在第一行断言
【发布时间】:2011-01-03 15:58:45
【问题描述】:

我在 Visual Studio 2008 中创建了一个基于 MFC 对话框的应用程序。

CCalendarWindowDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();

当我运行应用程序时,DoModal() 在第一行断言

INT_PTR CDialog::DoModal()
{
    // can be constructed with a resource template or InitModalIndirect
    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
    m_lpDialogTemplate != NULL);
}

有人可以帮忙吗?

【问题讨论】:

    标签: mfc visual-c++ modal-dialog


    【解决方案1】:

    似乎资源模板丢失或映射错误。

    查看 CCalendarWindowDlg 类中的 IDD 属性,并查看 资源视图 中是否存在适当的对话框。

    您是否将附属 DLL 用于本地化或其他目的?或者可能缺少 CCalendarWindowDlg 组件资源 DLL。

    【讨论】:

    • 感谢 Gopalakrishnan 的及时回复。但我检查了 IDD 属性,它与“resource.h”和“CalendarWindow.rc”中的属性匹配。我还能做什么?
    • 可以查看CCalenderWindowDlg是否使用了附属DLL
    【解决方案2】:

    为了在我的 Dialog 类的构造函数中解决这个问题,我做了类似的事情

    CCalendarWindowDlg::CCalendarWindowDlg ()
        :CDialog(IDD)
    {
    }
    

    请注意,我正在使用我要呈现的表单的资源 ID 调用 CDialog 父类的构造函数。

    【讨论】:

      【解决方案3】:

      我在使用 Visual Studio 2012 创建新的基于对话框的 MFC 应用程序时遇到了同样的问题。对我来说,解决方案是使用以对话框资源 ID 作为参数的对话框构造器。

      例如:

      CCalendarWindowDlg dlg(IDD_MYDIALOG);
      m_pMainWnd = &dlg;
      INT_PTR nResponse = dlg.DoModal();
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多