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

ShowMessage或者Messagebox弹出后出现access violation.该怎么处理

2012-02-24 
ShowMessage或者Messagebox弹出后出现access violation......我是在FormCreate事件里面调用ShowMessage或

ShowMessage或者Messagebox弹出后出现access violation......
我是在FormCreate事件里面调用ShowMessage或者MessageBox的,但在弹出Message后,如果马上按确定,程序正常,但如果稍等两三秒后,就会出现:
Access violation at address XXXXXXX in module 'vcl50.bpl'. Read of address 00000047.
我在FormShow函数调用就没有这种情况,

目前遇到过几会了,我实在没有头绪是哪里出错,希望指点下,
此外,顺便问个其它问题:dll里面使用try...catch是不是不能捕获异常的,我想捕获个socket的端口异常,结果捕获不了,后面使用__try...__exception捕获到了,但还是想在此确认下dll里面使用try...catch是不是不能捕获某些异常的....

[解决办法]
我也遇到过你说的这种情况.ShowMessage这些对话框会阻塞主进程,直到你点击确定才会继续.如果你的代码里面用到有皮肤组件等容易造成其他线程访问了没有初始化的资源造成错误.
[解决办法]
对话框放到onshow事件里面,初始化资源放到create里面.
[解决办法]
就你这个情况来看,这个校验放到winmain里面更合适

C/C++ code
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int){    try    {    //校验放到这个地方更合适    // if(不正确) return 0    //        Application->Initialize();        Application->MainFormOnTaskBar = true;        Application->CreateForm(__classid(TForm1), &Form1);        Application->Run();    }    catch (Exception &exception)    {        Application->ShowException(&exception);    }    catch (...)    {        try        {            throw Exception("");        }        catch (Exception &exception)        {            Application->ShowException(&exception);        }    }    return 0;}//----------------
[解决办法]
可以用"定时器"看看,在窗口启动的时候,启动"定时器",然后在"定时器"中做你要做的事.

热点排行