按钮控件更改id后CFileDialog无法调试

风海流 2011-06-26 06:14:04
今天遇到一个非常奇怪的问题,不知道怎么解决

机器环境是Win7 64bit,使用Visual Studio 2008。使用vtk5.6开发一个程序,加载了vtk的静态库,并且加载了opengl32.lib
之间新建一个基于对话框的项目。配置不使用Unicode,连接器选择不使用“incremental linker”,不嵌入清单(win7下 incremental linker总是错误,嵌入清单的话会报错,清单嵌不进去可能是由于杀毒软件的问题)。
在资源视图的对话框上,拖一个“按钮控件”Button1到对话框上,这个Button1的任何属性都不更改。
为Button1添加一个事件处理程序OnBnClickedButton1() (右键点Button1然后选择“添加事件处理程序”)。
在OnBnClickedButton1()成员函数里实现下面代码:
/**************Code begins****************/
CFileDialog dlg(TRUE,
"",
NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ENABLESIZING|OFN_EXPLORER,
"vtk data files (*.vti)|*.vti|All Files (*.*)|*.*||",
NULL,
0);

dlg.DoModal();
/**************Code ends*******************/

保存,调试,点击Button1,完全正常。

然后,再向对话框拖进来一个“按钮控件”Button2,将Button2的ID修改成其他ID,例如“IDC_BUTTON_OPEN”,剩下的操作完全一样,添加事件处理程序,幅值Button1的代码到Button2里面,保存,启动调试。

此时,奇怪的事发生了,点击Button2,程序失去响应,vs的输出窗口停留在
“VolumeFMC.exe”: 已加载“C:\Windows\SysWOW64\iertutil.dll”这一句上。

终止当前调试,再次启动调试,点击Button1,同样失去响应。

不进行调试,在Debug文件夹下找到这个项目的exe,直接双击运行,点击Button1或者Button2,都没问题。

完全搞不懂为什么,猜想可能是更新了ie9导致了一些dll在调试时不正常。

p.s.:
又发现一个现象是,如果每次更改程序,都是直接点“调试”,vs自动编译链接,那么可能都没问题,但是如果点了“重新生成”,就一定会有问题。

...全文
354 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
风海流 2013-02-02
  • 打赏
  • 举报
回复
引用 6 楼 sha_jinhao 的回复:
解决了??!!
没有解决,我也记不得怎么回事了,当时是测试vtk,好久没用了。
jimette 2013-02-01
  • 打赏
  • 举报
回复
解决了??!!
向立天 2013-02-01
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
风海流 2011-06-27
  • 打赏
  • 举报
回复
77E200A4 mov eax,56h
77E200A9 xor ecx,ecx
77E200AB lea edx,[esp+4]
77E200AF call dword ptr fs:[0C0h]
77E200B6 add esp,4
77E200B9 ret 40h
77E200BC mov eax,57h
77E200C1 mov ecx,18h
77E200C6 lea edx,[esp+4]
77E200CA call dword ptr fs:[0C0h]
77E200D1 add esp,4
77E200D4 ret 4
77E200D7 nop
77E200D8 mov eax,58h
77E200DD mov ecx,1Dh
77E200E2 lea edx,[esp+4]
77E200E6 call dword ptr fs:[0C0h]
77E200ED add esp,4 77E200F0 ret 14h
77E200F3 nop
77E200F4 mov eax,59h
77E200F9 xor ecx,ecx
77E200FB lea edx,[esp+4]
77E200FF call dword ptr fs:[0C0h]
77E20106 add esp,4
77E20109 ret 10h
77E2010C mov eax,5Ah
77E20111 xor ecx,ecx
77E20113 lea edx,[esp+4]
77E20117 call dword ptr fs:[0C0h]
77E2011E add esp,4

这个是汇编代码,每次“全部中断”基本是停在这一句。
风海流 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huyaoyu 的回复:]
引用 1 楼 zgl7903 的回复:
是不是设置了断点?


没有设置断点,程序在跑,不过总是在一个叫nt**.dll的一段汇编代码里面跑,那个dll的名字记不清了,明天回去看看.
[/Quote]

程序失去响应以后,在vs的调试面板上点击“全部中断”,查看调用堆栈,内容如下

总是卡在ntdll.dll这个dll里。
风海流 2011-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zgl7903 的回复:]
是不是设置了断点?
[/Quote]

没有设置断点,程序在跑,不过总是在一个叫nt**.dll的一段汇编代码里面跑,那个dll的名字记不清了,明天回去看看.
zgl7903 2011-06-26
  • 打赏
  • 举报
回复
是不是设置了断点?

15,980

社区成员

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

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