ExitProcess(status)中断问题!加急

herolei2001 2011-03-03 04:51:19
问题描述:我在单文档程序的一个对话框中加入了一个打印的类,使用如下:
void CCURDATA_VIEWDLG::PrintView ( void )
{
m_pPrintFrame = new CPrintFrame(this);

GetWindowGraph();
m_pPrintFrame->DoPrintView();
}
使用打印功能后,关闭此对话框时,程序就会在 ExitProcess(status)处崩溃,如果不使用打印功能,关闭此对话框就不会崩,请高手指教一下,好着急啊!
...全文
842 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
向大侠 遇到过这种情况么?有没有什么建议?
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
中断后调用堆栈 显示如下:
AdsDll.dll!66103970()
[下面的框架可能不正确和/或缺失,没有为 AdsDll.dll 加载符号]
AdsDll.dll!66103ca2()
AdsDll.dll!661046e1()
TcAdsDll.dll!10015c53()
TcAdsDll.dll!10015bec()
TcAdsDll.dll!10015d26()
TcAdsDll.dll!1000bc3b()
TcAdsDll.dll!1000c63e()
TcAdsDll.dll!1000c607()
TcAdsDll.dll!10008c4e()
TcAdsDll.dll!10008c1f()
TcAdsDll.dll!1001b3ec()
TcAdsDll.dll!1001b490()
TcAdsDll.dll!1001b024()
TcAdsDll.dll!1001b10b()
ntdll.dll!7c92118a()
ntdll.dll!7c943ada()
ntdll.dll!7c930435()
ntdll.dll!7c92f65c()
ntdll.dll!7c92f661()
kernel32.dll!7c81cb26()
-> msvcr90d.dll!__crtExitProcess(int status=0) 行732 C
msvcr90d.dll!doexit(int code=0, int quick=0, int retcaller=0) 行644 + 0x9 字节 C
msvcr90d.dll!exit(int code=0) 行412 + 0xd 字节 C
Herolei.exe!__tmainCRTStartup() 行595 C
Herolei.exe!wWinMainCRTStartup() 行399 C
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
问题出在对话框关闭的时候,应该是结束那些加载的dll时崩溃的,我用
try{
exit(0);
}
catch(CException& e){
.....
}
运行结果是在try里直接崩溃,也捕捉不到错误。
向立天 2011-03-04
  • 打赏
  • 举报
回复
看调用堆栈
问题不是出在你贴代码的地方
另外单文档打印功能不是框架集成的么
怎么还会出问题
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
如果有高手解决过此类问题请不吝赐教,真的好着急啊。
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
如果有高手解决过此类问题请不吝赐教,真的好着急啊。
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
谢谢5#回复,我用的打印类在对话框程序中是好使的,但是加入到单文档的程序中,关闭对话框时出了上述问题。
void __cdecl __crtExitProcess (
int status
)
{
__crtCorExitProcess(status);

/*
* Either mscoree.dll isn't loaded,
* or CorExitProcess isn't exported from mscoree.dll,
* or CorExitProcess returned (should never happen).
* Just call ExitProcess.
*/

ExitProcess(status); //中断位置
}
向立天 2011-03-04
  • 打赏
  • 举报
回复
对话框添加打印功能
这又有一个介绍
希望对你有帮助
http://blog.csdn.net/xianglitian/archive/2010/10/23/5960970.aspx
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
2#楼的方法直接关闭了主程序,我只是想关闭主程序中的一个对话框,有什么别的办法么?谢谢
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
谢谢2位答复,2楼的我试过了,现在试试(列宁)的建议
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
恩,好的,谢谢向立天,兔子党组织部长,New人等的帮助,结贴了。
向立天 2011-03-04
  • 打赏
  • 举报
回复
原来如此
你这么捕捉肯定是没有结果的
你应该检查与打印相关的代码
尤其是退出的时候
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
to 向立天:try{
exit(0);
}
catch(CException& e){
.....
}

这段代码是我测试用的,因为程序总在“实时数据”对话框关闭的时候崩溃,看调用堆栈也什么都看不到,所以用这个测试代码试了一下。我说的释放dll指的是系统释放的dll,我的程序只加载了一个静态的库,应该没有问题。
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
to 向立天:try{
exit(0);
}
catch(CException& e){
.....
}

这段代码是我测试用的,因为程序总在“实时数据”对话框关闭的时候崩溃,看调用堆栈也什么都看不到,所以用这个测试代码试了一下。
向立天 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 herolei2001 的回复:]

问题出在对话框关闭的时候,应该是结束那些加载的dll时崩溃的,我用
try{
exit(0);
}
catch(CException& e){
.....
}
运行结果是在try里直接崩溃,也捕捉不到错误。
[/Quote]
不好意思
这里没看懂
释放dll不应该是freelibrary么
调用exit做什么
herolei2001 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 visualeleven 的回复:]

程序退出的时候当掉,你的new的m_pPrintFrame是什么销毁的
[/Quote]
打印界面是用户销毁的。

hxfjb(new人):现在困扰我的就是如果不适用打印功能,对话框关闭时无错误,使用对话框后就会在系统提供的ExitProcess(status)中报错。经过试验和思考,我觉得我错误确实出在m_pPrintFrame = new CPrintFrame(this);后销毁问题上,因为销毁时也会在ExitProcess(status)的地方中断
Eleven 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 herolei2001 的回复:]
问题描述:我在单文档程序的一个对话框中加入了一个打印的类,使用如下:
void CCURDATA_VIEWDLG::PrintView ( void )
{
m_pPrintFrame = new CPrintFrame(this);

GetWindowGraph();
m_pPrintFrame->DoPrintView();
}
使用打印功能后,关闭此对话框时,程序就会在 E……
[/Quote]
程序退出的时候当掉,你的new的m_pPrintFrame是什么销毁的
hxfjb 2011-03-04
  • 打赏
  • 举报
回复
程序出现了异常,你将某一行代码注释掉就不出现异常了,你认为是那一行代码造成的,然而很多情况下,是别的地方有bug,只是该bug暂时没有表现为程序当掉而已。

因此:不统筹看的代码,很难定位问题所在。
Lactoferrin 2011-03-03
  • 打赏
  • 举报
回复
如果没有退出时的dll清理任务,直接TerminateProcess((HANDLE)-1,status)
Chivalry 2011-03-03
  • 打赏
  • 举报
回复
退出时delete m_pPrintFrame了么?试试看

15,471

社区成员

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

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