读书人

为何C++BUILDER在创建出窗口后就不挂了

发布时间: 2013-01-06 15:44:48 作者: rapoo

为什么C++BUILDER在创建出窗口后就不挂了??


Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TTestForm), &TestForm);
Application->Run();


以上语句跑完,窗口已被创建了。
创建了两个按钮,分别做一个除零错,和一个非法指针访问。
代码如下:

//---------------------------------------
void __fastcall TEPSForm::btnDivZeroClick(TObject *Sender)
{

int i=0;
int j=1;
j = j/i;
}
//---------------------------------------

void __fastcall TEPSForm::btnNullPClick(TObject *Sender)
{
char* pData=NULL;
*pData = 1;
}


很奇怪的是,点它们除了报错外,居然主程序不关??这和平时的理解完全不同,
在VC中都会使程序彻底退出,这是为什么?如何解决呢?

现在很希望在CBC中出现这种情况能将整个程序自动完全退出,而不是还可以对界面进行各种操作。
望大虾指教!
[解决办法]
加个ApplicationEvents1组件在他的OnException可以处理异常,当然也可以退出
void __fastcall TForm1::ApplicationEvents1Exception(TObject *Sender, Exception *E)

{
Application->Terminate();
}

[解决办法]
VCL中的异常处理机制比VC要好。

用断言:assert,可以保证被断言的代码出错就中止。
[解决办法]
引用:
WIN7下验证确实可以。。。在XP下再试试,如果可以这个方法更简单


如果你考虑接管异常,直接修改工程.cpp文件,将try部分捕捉到的异常自己处理就行了:
    try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}


以上的ShowException处,就是将异常抛出,你可以修改这段代码。

读书人网 >C++ Builder

热点推荐