【发布时间】:2013-02-19 12:26:48
【问题描述】:
我正在尝试调用 CWnd 类的函数 GetParent()。 每次都会抛出异常。 我正在从工作线程调用该函数。
这是导致异常的行: CWnd* parent = this->GetParent();
我也试过“GetParent()->PostMessage(........);”,还是抛出异常。
我在 CDialog 中使用此方法。
我注意到 CWnd 成员 m_hWnd 有时是 0x00000000 或 0x00000001。 在另一台计算机上,我没有收到此异常。 是项目设置有问题还是我的代码有问题?
【问题讨论】:
-
贴出相关代码(5-6行代码围绕错误行)
-
由于 CDialog 派生自 CWnd,它必须有一个名为 m_hWnd 的成员,如果值为 != 0,请在调试器中检查。
-
您说“来自工作线程”。这是否意味着您已经在 AfxBeginThread 启动的线程上创建了这个 CWnd 类,如果是这样,您是否有 followed msdn.microsoft.com 来覆盖 InitInstance 函数?由于这适用于另一台计算机,并且正如@neagoegab 指出的那样,您的 m_hWnd 不是有效窗口,因此您可能正在处理在创建和初始化 CWnd 之前调用 GetParent() 的竞争条件。