[C++] Obsługa try ... catch
Ostatnio zmodyfikowano 2013-06-16 15:46
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-06-16 12:26:20 Ok, rozumiem.. ale jak Monika doradzila SEH mozna wylapac w nastepujacy sposob: __try {      } __except( expression ) {      }
  tylko pojawia sie ponownie to samo pytanie czyli co tym razem wpisac w "expression", sciagnalem wiec z podanego przez Monike linka i wpisalem praktycznie to samo uzywajac (po lekkiej modyfikacji dla WINAPI) funkcje filter(...), ktora wyglada u mnie tak: int filter( unsigned int code, struct _EXCEPTION_POINTERS * ep ) {     MessageBox( 0, "in filter.", 0, 0 );     if( code == EXCEPTION_ACCESS_VIOLATION )     {         MessageBox( 0, "Zlapany.", 0, 0 );         return EXCEPTION_EXECUTE_HANDLER;     }          else {         MessageBox( 0, "Niezlapany.", 0, 0 );         return EXCEPTION_CONTINUE_SEARCH;     };      }
  a teraz wlasciwy kod w ktorym chce wylapac blad: __try {     LPSTR string =( LPSTR ) GlobalAlloc( GPTR, 1 );     strcpy( string, "abcdefghijklamnoprst" ); }
  __except( filter( GetExceptionCode(), GetExceptionInformation() ) ) {     MessageBox( 0, "prawdopodobnie przekroczyles ilosc znakow w stringu", "oj nie dobrze", 0 ); }
  No i ponownie ten sam problem czyli przy uruchomieniu programu nie dostaje zadnego MessageBox'a a jedynie blad z kompilatora:  XXX.exe triggered a breakpoint. Naprawde na to nie ma zadnej metody? Wiem ze mozna uzyc rozwiazanie zaproponowane przez janakowalksiego ale mi nie tyle chodzi o ten konkretny kod ale o to by miec uniwersalna metode wylapywania bledow w mojej aplikacji, podalem akurat taki przyklad, ktory bedzie pewnie najczestszym bledem.  | 
 | 
DejaVu  | 
» 2013-06-16 13:20:38 W bloku catch podaje się typ danych jaki ma zostać przechwycony. Jeżeli napiszesz: to przechwycić chcesz: catch( const char * sTekst ) { } Jeżeli chcesz przechwycić liczbę to po prostu piszesz: Jeżeli chcesz przechwycić jakiś rzucany obiekt, np. throw CObiekt( 1, "komunikat" );
  to piszesz: catch( const CObiekt & obiekt ) { }
  Wyjątki służą do obsługiwania zamierzonych i zaplanowanych działań programisty i nie są metodą na zabezpieczenie programu przed niepoprawnym dostępem do pamięci. Nie w C++.  | 
 | 
xevuel  | 
» 2013-06-16 13:23:19  | 
 | 
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-06-16 15:44:21 @xevuel, dzieki, o to mi chodzilo. zaraz sproboje odpalic w kodzie.
  @DejaVu, teraz juz rozumiem, dzieki. Dodatkowo pozwole sobie skorzystac z tego ze juz pisze poniewaz zamknales moj drugi watek (zapytanie sumaryczne w SQL) i nie moge juz tam odpisac: http://cpp0x.pl/forum/temat/?id=11411 mianowicie, bez grupowania takie query nie pojdzie poniewaz nie mozna laczyc agregated funkcji z nieagregated wynikami bo agregated wyrzuci zawsze jeden wynik a nieagregated moze wyrzucic wiecej rzedow.  | 
 | 
pekfos  | 
» 2013-06-16 15:46:57 | Dodatkowo pozwole sobie skorzystac z tego ze juz pisze poniewaz zamknales moj drugi watek (zapytanie sumaryczne w SQL) i nie moge juz tam odpisac: |  
 Jeden problem = jeden temat, a swoje tematy możesz otwierać.  | 
 | 
| 1 « 2 »  |