【问题标题】:MFC CDialog::Create failsMFC CDialog::Create 失败
【发布时间】: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。我现在正在对此进行更多测试。

【问题讨论】:

  • 为什么不能附加调试器?

标签: c++ mfc cdialog


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不,只有一个复选框和一个列表控件。我什至尝试删除所有控件并注释掉类中的相应代码,但仍然无法让 Create() 工作。
    猜你喜欢
    • 2014-03-14
    • 2012-10-28
    • 2014-10-06
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多