首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2013-01-06 
为什么C++BUILDER在创建出窗口后就不挂了??Application-Initialize()Application-MainFormOnTaskBar

为什么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处,就是将异常抛出,你可以修改这段代码。

热点排行