非模态对话框create时出错

憨豆2 2011-10-10 01:39:24
我的程序是wtl对话框程序
在某些机器上有时会出现崩溃的情况,自己调试又没问题
用WinDbg分析崩溃的dmp文件有这样的信息:
STACK_TEXT:
0012f8e0 77d25bc9 006f7e80 447b0000 0012f910 user32!_GetChildControl+0xe
0012f8f0 77d23a26 006f7e80 00704d78 00000000 user32!_NextSibblingOrAncestor+0x36
0012f910 77d25c22 006f7e80 00704d78 00000000 user32!_NextControl+0x47
0012f930 77d25c6a 006f7e80 00704d78 00000006 user32!xxxRemoveDefaultButton+0x63
0012f948 77d23e3a 006f7e80 00000007 006f7e80 user32!xxxSaveDlgFocus+0x3e
0012f974 77d1b50c 00000000 00000006 00000000 user32!DefDlgProcWorker+0x2f5
0012f99c 7c92e473 0012f9ac 00000018 006f84b8 user32!__fnDWORD+0x24
0012f9c0 77d1da6c 77d259bf 000f0ff8 00240f62 ntdll!KiUserCallbackDispatcher+0x13
0012f9f0 77d1b50c 00000000 00000007 00000000 user32!NtUserSetFocus+0xc
0012fa18 7c92e473 0012fa28 00000018 006f84b8 user32!__fnDWORD+0x24
0012fa3c 77d1d83f 77d2c0a7 00240f62 0000005b ntdll!KiUserCallbackDispatcher+0x13
0012faec 77d24704 00000000 006f84b8 00000190 user32!NtUserCallHwndLock+0xc
0012fb10 77d27d98 10000000 10006430 000f0ff8 user32!CreateDialogIndirectParamAorW+0x33
0012fb3c 0040178e 10000000 0000006c 000f0ff8 user32!CreateDialogParamW+0x49
WARNING: Stack unwind information not available. Following frames may be wrong.
00000000 00000000 00000000 00000000 00000000 sgupdateapp+0x178e

在map文件中分析查找到出问题的代码为:

SG_WelcomeProcedure* pWelcomeProcedure = new SG_WelcomeProcedure;
SG_DownloadProcedure* pDownloadProcedure = new SG_DownloadProcedure;
SG_UpdateProcedure* pUpdateProcedure = new SG_UpdateProcedure;
SG_NoNeedUpdateProcedure* pNoNeedUpdateProcedure = new SG_NoNeedUpdateProcedure;
SG_CancelProcedure* pCancelProcedure = new SG_CancelProcedure;

pWelcomeProcedure->Create(m_hWnd);
pDownloadProcedure->Create(m_hWnd);
pUpdateProcedure->Create(m_hWnd);
pNoNeedUpdateProcedure->Create(m_hWnd);
pCancelProcedure->Create(m_hWnd);

是第二个子对话框Create时出错了,找了很久不知道是什么原因
这种在某些机器上有时出问题的代码太折磨人了,请大侠们帮帮忙看看,SG_DownloadProcedure这个子对话框上只有几个edit和一个列表控件一个进度条控件
...全文
568 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-11-21
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
憨豆2 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wy4126 的回复:]

Create( IDD_DIALOG1 );参数应该是ID
[/Quote]
是wtl对话框不是mfc
wy4126 2011-10-27
  • 打赏
  • 举报
回复
Create( IDD_DIALOG1 );参数应该是ID
gameslq 2011-10-26
  • 打赏
  • 举报
回复
用windbg分析dump文件时 用命令!analyze -v
看看引起错误的原因是什么
憨豆2 2011-10-26
  • 打赏
  • 举报
回复
确认了一下,是第一个子对话框创建就出错了,我的程序是用VC6在WIN7上编译的,报错的机器都是xp的
憨豆2 2011-10-26
  • 打赏
  • 举报
回复
我的程序是在WIN7上编译的,报错的两台机器操作系统都是 xp service pack 2
憨豆2 2011-10-18
  • 打赏
  • 举报
回复
这个崩溃的问题又出现了,郁闷,绝大部分时间都没问题,调试的时候怎么也出现不了,我把那个对话框资源删除掉重新画一个对话框再看看
憨豆2 2011-10-13
  • 打赏
  • 举报
回复
多谢大家的回复,SG_DownloadProcedure 子对话框里面有列表控件和进度条控件,而_tWinMain函数中有这样的用法:AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES),也就是说进度条和列表控件在这个工程中没有被注册,修改成了AtlInitCommonControls(ICC_WIN95_CLASSES),现在那台出现过问题的机器上暂时没出现崩溃了
AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES)这种用法是由vc自己生成的代码,我们一般都没改,这个程序在绝大部分机器上都没问题,而且其他这样写的程序也从来没出过问题,非常纳闷
向立天 2011-10-13
  • 打赏
  • 举报
回复
在有问题的机器上远程调试看看
luckytwo888 2011-10-13
  • 打赏
  • 举报
回复
例如:
pDownloadProcedure->Create(m_hWnd);改成pDownloadProcedure->Create(IDD_DOWND,this);

IDD_DOWND为SG_DownloadProcedure类对话框的ID值。根据你自己的实际ID值更改该参数即可,避免出现该错误。
shen_wei 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]
去掉第二个,原来的第三个正确吗?
[/Quote]
这样怎么样啊
用户 昵称 2011-10-12
  • 打赏
  • 举报
回复
去掉第二个,原来的第三个正确吗?
憨豆2 2011-10-10
  • 打赏
  • 举报
回复
没人回呀,有wtl高手帮忙看看么
采用MFC编程,子对话框常常要向主窗口传递数据,获取主窗口的对象指针便显得常重要了。 void CMyView::OnModel() //点击菜单,创建对话框的几种变量设置,总共是4种方法,模态的一种,模态的三种 { // TODO: Add your command handler code here //CDialog modDlg(MAKEINTRESOURCE(IDD_MODEL),this); //modDlg.DoModal(); static bool num=0;//第一次执行第一段,以后再打开都执行第二段。 static CModDlg Dlgless(this);//将MyView指针传进去 if (0==num) { CModDlg mod(this);//将MyView指针传进去 //mod.SetWindowText("局部变量——模态对话框");不允许动态设置模态对话框标题?这句编绎会出错 mod.DoModal(); Dlgless.Create(IDD_MODEL);//重复执行会出错,要放到构造函数中好 Dlgless.ShowWindow(SW_SHOW); Dlgless.SetWindowText("局部静态变量——对话框"); m_dlgless.Create(IDD_MODEL,this);//重复执行会出错,要放到构造函数中好 m_dlgless.ShowWindow(SW_SHOW); m_dlgless.SetWindowText("成员指针变量——对话框"); m_pDlgless=new CModDlg(this);//重复执行会出错,要放到构造函数中好, m_pDlgless->Create(IDD_MODEL);//重复执行会出错,要放到构造函数中好, m_pDlgless->ShowWindow(SW_SHOW); m_pDlgless->SetWindowText("成员指针变量——对话框"); num=1; } else { Dlgless.ShowWindow(SW_SHOW); m_dlgless.ShowWindow(SW_SHOW); m_pDlgless->ShowWindow(SW_SHOW); } }

15,979

社区成员

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

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