我遇到了一些代码来创建基于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。我现在正在做更多的测试。

有帮助吗?

解决方案

问题似乎与调用CDynLinkLibrary()有关。

我已经根据写入加载我的插件的软件的公司的要求对此进行了评论。重新添加此行会导致某些值仍为空,但现在可以正确创建窗口。

我将对此进行一些研究,如果发现任何问题,我会更新。如果有人比我更了解这一点(不难做到),请随时留下评论。

其他提示

对话框是否使用可能导致问题的任何控件?比如一个富有的人?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top