Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Отфильтровать ошибку для комп-а ClientSocket


Автор: kiLLProg 16.8.2009, 03:41
Если при активации ClientSocket'а сервак еще не запущен, то появляется окно с сообщением об ошибки. Я пытаюсь вывести сообщение в основном окне таким способом:
Код

try
    {
      ClientSocket1->Active = true;
    }
    catch (Exception &E)
    {
        ListBox2->Items->Add(E.Message);
    }
 
// или так 
    try
    {
      ClientSocket1->Active = true;
    }
     catch (...)
    {
       ListBox2->Items->Add("Err.")
    }


Не получается (Сообщени об ошибки выводится стандартным способом). Посоветуйте пожалуйста что нужно делать в данной ситуации. Программу не из среды запускал.

Автор: smoke_man 16.8.2009, 09:21
Используй OnError TClientSocket`а:
Код

/---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   ClientSocket1->Active = true;     
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{                             
      ClientSocket1->Active = false;
      ShowMessage("Error");
      ErrorCode = 0;
}
//---------------------------------------------------------------------------

Автор: kiLLProg 17.8.2009, 03:29
Спасибо, помогло. Буду знать.

Автор: Platov 17.8.2009, 07:46
Вот универсальный способ замены любых сообщений с ошибками на свои:

в листинг проги добавь
//---------------------------------------------------------------------------
void __fastcall TForm1::MyException(TObject *Sender,Exception *E)
 {
 AnsiString err=E->Message;
 err=err.Delete(1,err.Pos("#"));
 ShowMessage("Ошибка!\r\n\r\n        "+err);

 }

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnException=MyException;
}
//---------------------------------------------------------------------------


ну и в заголовочный файл..

void __fastcall MyException(TObject *Sender,Exception *E);


Можно анализировать err и выдавать разные сообщения для разных ошибок

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)