AfxGetMainWnd函数疑问,什么情况得到的会是父窗口的指针

kusoido 2013-07-29 10:32:25
最近碰到一个很奇怪的问题,查了半天才发现,原来是这个函数在作怪,问题如下:
最近程序会异常,跑不起来,调试的时候却是正常的,只好到处输入日志,结果发现在一个判断上出了问题,代码如下

if (AfxGetMainWnd() &&(CMainFrame*)AfxGetMainWnd()->一个变量)
{
访问变量中的函数
}

主框架创建时有指定一个父窗口,奇怪的是AfxGetMainWnd函数得到的居然是父窗口的指针,导致后面访问变量出错,程序就死了。

比较纠结的是,调试的时候都OK的,不知道怎么回事,AfxGetMainWnd什么时候会得到父窗口的指针呢??
...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-08-30
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
“加载配置文件” 代码有问题吧。
kusoido 2013-07-30
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
“主框架创建时有指定一个父窗口” 有没有这个必要 ?
有的,刚测了一下,悲剧,得到的还不一定是父窗口,感觉内存有点错乱了,程序启动的时候有加载配置文件,现在只用这份配置能重现,配置文件一改就不会异常了,但是和具体的配置无关。
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
“主框架创建时有指定一个父窗口” 有没有这个必要 ?
kusoido 2013-07-30
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
“你的应用程序不是一个OLE服务器,这个函数仅返回你的应用程序对象的 m_pMainWnd。” 你的程序 是不是 OLE 容器 ?
我的程序是基于MFC单文档的,算是吧?
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
“你的应用程序不是一个OLE服务器,这个函数仅返回你的应用程序对象的 m_pMainWnd。” 你的程序 是不是 OLE 容器 ?
kusoido 2013-07-30
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
“如果服务器具有一个可以在容器内现场激活的对象,并且这个容器是活动的,则这个函数返回一个指向包含这个现场活动文档的框架窗口对象的指针。 如果没有可以在容器内现场激活的对象,或者你的应用程序不是一个OLE服务器,这个函数仅返回你的应用程序对象的m_pMainWnd。 如果AfxGetMainWnd被应用程序主线程调用,它根据以上规则返回应用程序的主窗口。如果该函数被应用程序的次线程调用,该函数返回与引起该调用线程连接的主窗口。”
通俗一点就是如果有父窗口,这个函数一定会返回父窗口的指针吗?
schlafenhamster 2013-07-29
  • 打赏
  • 举报
回复
“如果服务器具有一个可以在容器内现场激活的对象,并且这个容器是活动的,则这个函数返回一个指向包含这个现场活动文档的框架窗口对象的指针。 如果没有可以在容器内现场激活的对象,或者你的应用程序不是一个OLE服务器,这个函数仅返回你的应用程序对象的m_pMainWnd。 如果AfxGetMainWnd被应用程序主线程调用,它根据以上规则返回应用程序的主窗口。如果该函数被应用程序的次线程调用,该函数返回与引起该调用线程连接的主窗口。”
kusoido 2013-07-29
  • 打赏
  • 举报
回复
木有人知道么?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧