各位老大好!提一个让我烦了很多天的问题.请各位大侠给点指示:
开发环境: 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.