函数没执行完就返回了,晕

willwl 2006-01-04 07:49:41
这个函数是在一个Timer回调函数中被重复调用的(每隔一段时间调一次),但函数不知道为什么只执行前两句,m_pIBoard是一个接口指针
short _stdcall CSysBoard::SingleIO(LPVOID pDataBuf)
{
if(m_pIBoard)
m_pIBoard->SingleIO();

// 函数以下部分不会被执行到
if(!m_bSave)
{
...
}

...

return 0;
}

如果把前两句改成
if(m_pIBoard)
{
m_pIBoard->SingleIO(); // 在此设断点查看@err,hr = S_OK
DWORD e = GetLastError(); // 此句不会被执行
}

其中接口m_pIBoard的实现函数大体如下
short _stdcall CBoard::SingleIO()
{
// do sth easy just like "int a = b;"
...//在此设断点,可以执行,直到此函数结束}
return 0;
}
顺便说一下,这两个函数分别在不同的动态库中,但在同一进程中,断点调试点进入m_pIBoard->SingleIO(),提示Access Violution,单步高度,直接又返回到CSysBoard的SingleIO的开始{处了
...全文
195 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspnetwuxueyou 2006-01-11
  • 打赏
  • 举报
回复
too many possibilities
XXandOO 2006-01-08
  • 打赏
  • 举报
回复
很明显,调用堆栈被非法写入破坏了,检查越界和无效指针。
eleek 2006-01-07
  • 打赏
  • 举报
回复
跟踪检查一下m_pIBoard->SingleIO();内部的执行情况,应该是里面出了异常了。
你可以在m_pIBoard->SingleIO();外面加一个Try/Catch试试,把异常捕获。
property1 2006-01-07
  • 打赏
  • 举报
回复
有可能 内存错误, 检查有没有 越界 的情况
Rafier 2006-01-07
  • 打赏
  • 举报
回复
delete 野指针....
====================
这个现在的C++中不会有异常的吧
zephyr007 2006-01-07
  • 打赏
  • 举报
回复
用boundchecker跟踪一下
palluo 2006-01-06
  • 打赏
  • 举报
回复
REBUILD ALL
loverx 2006-01-04
  • 打赏
  • 举报
回复
一看问题就知道是辅线程当掉了,导致整个进程也不声不响的当了

自己检查 m_pIBoard->SingleIO();内部肯定有异常,操作非法内存,delete 野指针....

你把SingleIO();内部清空,在调试,有问题才怪呢

willwl 2006-01-04
  • 打赏
  • 举报
回复
还有,此函数运行时并不报错亦不报警,只是函数下面的句子都没执行,所以有些参数没有改变,运行结果并不是所期望的。在此先谢谢大家,分不够可以再加。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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