请问下面这段代码出现这种运行情况的可能性

psistorm 2009-04-24 08:59:15
请问下面这段代码出现这种运行情况的可能性

try
{
if (g_wnd == hWnd)
{
TRACE("I am here!!\n");
}
lResult = DoCallWindowProc(wndProc, hWnd, message, wParam, lParam);
}catch(...)
{
if (g_wnd == hWnd)
{
TRACE("I meet a crash\n");
}
}
运行中发现, 有时候会只输出"I meet a crash",但没有"I am here!!"
代码中的g_wnd是全局变量,是我临时添加的,在调试中自己设置为感兴趣的值,别的地方是绝对不会修改它的,hWnd是这段代码所处的函数中的一个局部变量,DoCallWindowProc接受的参数都是by value的,从语法上来说,是不可能导致hWnd的值发生改变的;
请问,发生上述运行现象的情况是有什么可能的解释呢?
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghuayi_xiyou 2009-04-24
  • 打赏
  • 举报
回复
1)既然是全局 变量g_wnd,如果你没有赋值,编译器赋予的初始值为0?
2) DoCallWindowProc(wndProc, hWnd, message, wParam, lParam); 这里使用了window的句柄,是否会改变其值?


如果上面两点,1)初始值为0,并且2)调用后句柄值发生变化。那么结果就好解释了。

其他思路:
1)watch加上单步,看值的变化。
2)看汇编
psistorm 2009-04-24
  • 打赏
  • 举报
回复
没人有思路阿
Paradin 2009-04-24
  • 打赏
  • 举报
回复
DoCallWindowProc
jame2001 2009-04-24
  • 打赏
  • 举报
回复
你可以把exception的訊息也一起抓出來....
jn989 2009-04-24
  • 打赏
  • 举报
回复
关注中……
psistorm 2009-04-24
  • 打赏
  • 举报
回复
回5楼
1)g_wnd是我在调试时在watch窗口中直接修改它的值的
2)不知道你说的是什么意思,DoCallWindowProc的入参都是by value的,没有机会修改hWnd应该是很明显的

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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