我遇到了一些代码来创建基于CDialog的窗口的问题。该代码上周工作正常。我做的唯一更改是用哈希数组替换C ++ deque。我已经注释了调用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。我现在正在做更多的测试。
答案 0 :(得分:1)
问题似乎与调用CDynLinkLibrary()有关。
我已经根据写入加载我的插件的软件的公司的要求对此进行了评论。重新添加此行会导致某些值仍为空,但现在可以正确创建窗口。
我将对此进行一些研究,如果发现任何问题,我会更新。如果有人比我更了解这一点(不难做到),请随时留下评论。
答案 1 :(得分:0)
对话框是否使用可能导致问题的任何控件?比如一个富有的人?