Poikkeuskäsittelijä C++:ssa
Lähetetty: 20.09.2006 14:56
Kokeillaan nyt sitten teidän hoksottimianne. Kokeilin tätä jo postata eräälle nörttifoorumille, mutta ei mulla ole vielä oikeutta moiseen toimenpiteeseen.
Eli homma on ihan simppeli: haluan ympätä poikkeuskäsittelijän C++-kieliseen metodiini.
Metodin tehtävänä on avata tietyllä tiedostopäätteellä varustetut kuvat. Yrittäessään avata muilla päätteillä varustettuja kuvia ohjelma menee polvilleen ja laskee alleen. Tarkoituksena olisi siis lisätä metodille poikkeuskäsittelijä, joka sieppaa tuon tiedostopäätevirheen aiheuttaman poikkeuksen (ja samalla kaikki muutkin poikkeukset) sallien ohjelman jatkamisen normaalisti virheestä eteenpäin. Ei siis mitään ihmeellistä. Ohessa metodini koodi:
void __fastcall TMainForm::avaaClick(TObject *Sender){
try{
if(OpenPictureDialog->Execute()){
TChild *child = new TChild(this); child->Image->Picture->LoadFromFile(OpenPictureDialog->FileName);
child->ClientWidth = child->Image->Picture->Width;
child->ClientHeight = child->Image->Picture->Height;
child->Caption = ExtractFileName(OpenPictureDialog->FileName);
child->Show(); // optionaalinen
}
}
catch(...) {
Application->MessageBox("U fucked up", "Message", MB_OK);
}
}
Ongelmana on se, että mitään poikkeuksia ei siepata, vaan ohjelma kaatuu edelleen heti, kun se yrittää avata sopimattoman kuvan.
Mikä käsittelijässäni on vikana? Kuinka sen saa toimimaan?
Eli homma on ihan simppeli: haluan ympätä poikkeuskäsittelijän C++-kieliseen metodiini.
Metodin tehtävänä on avata tietyllä tiedostopäätteellä varustetut kuvat. Yrittäessään avata muilla päätteillä varustettuja kuvia ohjelma menee polvilleen ja laskee alleen. Tarkoituksena olisi siis lisätä metodille poikkeuskäsittelijä, joka sieppaa tuon tiedostopäätevirheen aiheuttaman poikkeuksen (ja samalla kaikki muutkin poikkeukset) sallien ohjelman jatkamisen normaalisti virheestä eteenpäin. Ei siis mitään ihmeellistä. Ohessa metodini koodi:
void __fastcall TMainForm::avaaClick(TObject *Sender){
try{
if(OpenPictureDialog->Execute()){
TChild *child = new TChild(this); child->Image->Picture->LoadFromFile(OpenPictureDialog->FileName);
child->ClientWidth = child->Image->Picture->Width;
child->ClientHeight = child->Image->Picture->Height;
child->Caption = ExtractFileName(OpenPictureDialog->FileName);
child->Show(); // optionaalinen
}
}
catch(...) {
Application->MessageBox("U fucked up", "Message", MB_OK);
}
}
Ongelmana on se, että mitään poikkeuksia ei siepata, vaan ohjelma kaatuu edelleen heti, kun se yrittää avata sopimattoman kuvan.
Mikä käsittelijässäni on vikana? Kuinka sen saa toimimaan?