Gå til innhold

Problemer med exception


Anbefalte innlegg

Jeg har laget en klasse som skal kastet ved exception, men problemet er at når jeg kaster en exception så går den bare til neste linje og gir en unhandled exception, og jeg får da ikke catcha den (har også prøve med catch (...)) jeg har også laga et test prosjekt, men der funker jo selfølgelig alt perfekt :(:(.

 

Hvis noen har en ide om hva som er galt så hadde det vært fryktelig fint.

 

Litt info:

VC++ 2005

win32

 

Dette er koden som funker

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

int Funksjon_som_feiler()
{
throw &YException(12,TEXT("æææ feil"));

//dummy linjer
int i = 0;
i++;
i++;

return 0;
}

int main()
{
try
{
 Funksjon_som_feiler();
}
catch (YException* e)
{
 int dummy = 0;
}
}

 

Koden som klikker

Skjult tekst: (Marker innholdet i feltet for å se teksten):

CSoundFileOgg::CSoundFileOgg(const char* pPath)YEXCEPTION
{
file = fopen(pPath,"rbS");
if(!file) 
{
 throw Exception(MODULE_SOUND | STAT_ERROR | YERROR_FILE_NOT_FOUND,TEXT("File Not Found"));
}
if(ov_open(file,&vf,NULL,0) < 0) 
{
 fclose(file);
 file = NULL;
 throw Exception(MODULE_SOUND | STAT_ERROR | YERROR_WRONG_FILE_TYPE,TEXT("Not a Ogg container"));
}
vi = ov_info(&vf,-1);
channels = vi->channels;
freq = vi->rate;
}

 

try/catch kode

EDIT: til koden som klikker

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

try
{
if(strstr(name,".ogg"))
 return new CSoundFileOgg(name);
if(strstr(name,".wav"))
 return new CSoundFileWav(name);
}
catch (YException* e)
{
return 0;
}

 

takker for alle svar.

Endret av Giddion
Lenke til kommentar
Videoannonse
Annonse
Det ser ut til at du kaster et exception av typen YException, mens du prøver å "ta imot" et exception av typen YException*. Prøv noe slikt som:

catch (YException& e) {
....
}

 

Edit: Men det er jo litt rart at det ikke funker med catch (...) { } som du sier at du har prøvd da..

7077968[/snapback]

 

hmm.. jeg kan ikke se at jeg kaster YException bare Exception (som er en macro (&YException++)), så jeg tror det skal gå bra med YException*, og som du sa så vil catch(...) fange den.

Jeg glemte også å nevnte at YEXCEPTION er også en macro (throw(...))

 

ok, jeg har ikke tid til å se over koden her, men mener det går å slå av generering av "exception-kode" ved å angi et argument til kompileren - kan det være det?

7079314[/snapback]

 

Vel det stemmer at det går, men den står på. dvs at exception skal brukes

 

Jeg har også gått gjennom alle instillinger (kompilatore og linker) og jeg ser ingen forskjell på settingene, men prosjektet som klikker er en DLL, der det går er et vanlig program.

 

Jeg har også satt inn test koden inn i prosjektet som klikker, og jeg får da ikke catcha exeptionen.

 

EDIT: jeg tokk å testet med å kaste en int: fikk samme resultat.

 

takker for alle svar.

Endret av Giddion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...