我在创建一个基于CDialog的窗口时遇到了一些代码问题。上周代码运行正常。我所做的唯一更改是用一个散列数组替换了一个C++双队列。我注释掉了这行代码,并调用了Create方法,以允许我跳过加载窗口。现在代码根本不再创建窗口了。
Create函数返回false,GetLastError函数返回0。我没有在窗口中使用任何自定义控件--只使用了一个复选框和一个列表控件。据我所知(此时我无法连接调试器),OnCreate和OnInitDialog函数根本没有被调用。
我粘贴了下面的代码,我一直使用这些代码来测试创建函数的返回和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。我现在正在做更多的测试。
发布于 2009-05-07 20:59:57
问题似乎出在对CDynLinkLibrary()的调用上。
我在编写加载我的插件的软件的公司的要求下注释掉了这一点。将此行添加回中会导致某些值仍然为空,但窗口现在已正确创建。
我将对此做一些研究,如果我发现了什么,我会更新的。如果有人比我更了解这一点(不难做到),请随时发表评论。
发布于 2009-05-07 16:51:25
该对话框是否使用了任何可能导致问题的控件?例如,一个richedit?
https://stackoverflow.com/questions/835419
复制相似问题