MFC CDialog::Create 失败

Posted

技术标签:

【中文标题】MFC CDialog::Create 失败【英文标题】:MFC CDialog::Create fails 【发布时间】:2009-05-07 15:44:12 【问题描述】:

我在创建基于 CDialog 的窗口时遇到了一些代码问题。该代码上周运行良好。我所做的唯一更改是将 C++ 双端队列替换为哈希数组。我已经注释掉了调用 Create 方法的代码行,以允许我跳过加载窗口。现在代码不再创建窗口了。

Create 函数返回 false,GetLastError 函数返回 0。我没有在窗口内使用任何自定义控件 - 只是一个复选框和一个列表控件。据我所知(此时我无法连接调试器)OnCreate 和 OnInitDialog 函数根本没有被调用。

我粘贴了下面的代码,用于测试 Create 函数的返回和 GetLastError

BOOL result = ORDER_HANDLER_GUI.Create(OrderHandlerGUI::IDD, AfxGetMainWnd());
int error = ::GetLastError();

if(result)
    AfxMessageBox("Created GUI");
else

    CString msg;
    msg.Format("%d", error);
    AfxMessageBox("Could not create GUI");
    AfxMessageBox(msg);

更新: 我终于设法让调试器附加(这是一个加载在第三方应用程序中的插件,由于某种原因不喜欢调试器)。单步执行代码后,似乎 AfxGetMainWnd() 返回 NULL。我现在正在对此进行更多测试。

【问题讨论】:

为什么不能附加调试器? 【参考方案1】:

问题似乎在于对 CDynLinkLibrary() 的调用。

应编写加载我插件的软件的公司的要求,我已将其注释掉。重新添加这一行会导致一些值仍然为空,但现在可以正确创建窗口。

我将对此进行一些研究,如果我发现任何东西,我会更新。如果有人比我更了解这一点(不难做到),请随时离开 cmets。

【讨论】:

【参考方案2】:

对话框是否使用任何可能导致问题的控件?例如 Richedit?

【讨论】:

不,只有一个复选框和一个列表控件。我什至尝试删除所有控件并注释掉类中的相应代码,但仍然无法让 Create() 工作。

以上是关于MFC CDialog::Create 失败的主要内容,如果未能解决你的问题,请参考以下文章

在MFC中怎么使主页面最小化而子窗口不最小化?求解

在 MFC 中从文档类创建无模式对话框

与使用 MFC 的常规 DLL 链接时,MFC 应用程序断言失败

在 MFC 编程的 \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp 第 62 行上调试断言失败

MFC调用窗口失败,很崩溃的问题

LoadFrame (MFC) 仅在澳大利亚失败