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 的常规 DLL 链接时,MFC 应用程序断言失败
在 MFC 编程的 \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp 第 62 行上调试断言失败