当前位置: 代码迷 >> VC >> 为什么基于对话框的程序出现了first-Chance exception in NTDLL.dll解决思路
  详细解决方案

为什么基于对话框的程序出现了first-Chance exception in NTDLL.dll解决思路

热度:3295   发布时间:2013-02-25 00:00:00.0
为什么基于对话框的程序出现了first-Chance exception in NTDLL.dll
各位老大好!提一个让我烦了很多天的问题.请各位大侠给点指示:

开发环境: VC6.0 安装的有 2003 的 SDK
OS: windows XP sp2

不知怎么搞得,这些天编个基于对话框的程序,用 Wizard 生成的, 什么也没有做,就在对话框里添了个按钮,然后在按钮里打开一个 文件对话框.在 debug 方式下, 点击按钮,打开文件对话框后,点确定后.然后再点对话框的确定按钮,退出程序,这时.就出现 

First-chance exception in mydiag.exe (NTDLL.dll) 0xc0000008 Invalid handle

在按钮点击事件中,我就只是如下的代码

void CShowfileDlg::OnShowfiledlg() 
{
// TODO: Add your control notification handler code here
CFileDialog DlgFile(TRUE);
if(DlgFile.DoModal() == IDOK)
{
m_strFileName = DlgFile.GetPathName();
UpdateData(FALSE);
}
}

//////////////////////////////////////
 
m_strFileName 是我对话框上一个 Edit 控件绑的变量.
/////////////////////////////////////

//////////////////////////////
 公司不让上外网,所以这些内容都是我抄在本子上,带回家来上网发的,有不详细的地方请各位大侠见谅.

//////////////////////////////

call stack 的内容

NTdll ! 7c924ff
NTdll ! 7c92e514
SHELL16! 00dd1b9a
SHELL16! 00dd2553
NTdll ! 7c92118a
NTdll! 7c9435f7
Kernel32! 7c81cd86
Kernel32 ! 7c81cdfe
doexit(int 0x00000000, int 0x00000000, int 0x000000000) line 392
exit(int 0x000000000)line279 + 13 byte
WinMainCRTStartup() line 345
Kernel32! 7c8165e7

////////////////////////////////////////////////////

跟踪了一下,
发现程序运行在 CRTEXE.c

的 如下位置就出现异常了

#endif /* WPRFLAG */
  if (argret < 0)
  _amsg_exit(_RT_SPACEARG);


  /*
  * do C++ constructors (initializers) specific to this EXE
  */
  _initterm( __xc_a, __xc_z ); ########@@@@@@@@ 这里一运行完就出现异常了 @@@@@@@#######

#ifdef _WINMAIN_
  /*
  * Skip past program name (first token in command line).
  * Check for and handle quoted program name.
  */


如果我不点按钮,不打开那个文件对话框,点对话框的确定退出,不会出现异常.
只打开 about 对话框,点对话框退出按钮,同样也不会出现异常.

我在自己家里的电脑上运行同样的程序,打开文件对话框,再退出,也不会出现异常.
我在公司的另一台电脑上,运行同样的程序,开始没问题,后来也出现同样异常.
我怀疑是 VC坏了,于是卸了重装.结果,acmboot.exe 老是会报 通用保护错,安装不下去.后来在网上查了,把 setup 文件夹里面的东西拷出来,才安装了下去. 再编绎运行,还是一样的 错.

公司的电脑里装了比较多的东西,重装一次,近乎是难以完成的任务. 跑其他的程序,比如 office viso tornado 好象也都没什么问题. 写 console 程序,也跑得很正常. 这该如何办呢?

请各位老大,给我点指示!十分感谢!!!




------解决方案--------------------------------------------------------
可能是m_strFileName绑定的有问题,或者在其它地方不正确地使用了该变量,你先试下把m_strFileName = DlgFile.GetPathName();这行代码注释掉会不会有问题。
------解决方案--------------------------------------------------------
Google到下面的内容

Did you check out 'first chance exception'? It's basically a warning type of message. Yes, there's an error but the 'first chance exception' is shown *before* the program handles the error (and only in debug mode). Since the program runs fine when not in debug mode I'd say you already have code that handles the error-the 'first chance exception' simply warns you that the error did occur. 


  相关解决方案