Witam,
Mam zrobiony program ktory ma dwie funkcje:
- pierwsza ('Func1') uruchamia inna DLL-ke (a dokladniej za pomoca 'LoadLibraryEx' uruchamiam funkcje o nazwie 'Func2') ktora przerabia plik. DLL-ka ta ma obsluge bledow: np. w razie zlej tresci lub zlej nazwy pliku, itp. wypluwa blad.
Moja 'Func1' doklada dane do pliku i jezeli cos pojdzie nie tak rowniez wypluwa blad.
Wszystko jest objete 'try' i 'catch':
Func1(...)
{
try
{
//uruchamiam funkcje 'Func2' z DLL-ki, ktora przerabia plik na inny (m.in. zmienia rozszerzenie). Jezeli cos pojdzie nie tak przypisuje blad do enum 'giError' i 'Func2' zwraca flage bledu FALSE. Jezeli wszystko ok to zwraca TRUE.
//...........
//'throw' jezeli jakis blad w 'Func1'
//...........
}
catch (runtime_error &ex)
{
giError = ERROR_TRANSFORMFILE;
gsError = ex.what();
return FALSE;
}
catch (exception &ex)
{
giError = ERROR_TRANSFORMFILE;
gsError = ex.what();
return FALSE;
}
catch (...)
{
gsError = "Unknown error";
return FALSE;
}
//Jezeli wszystko ok
return TRUE;
}
- druga ('GetMessageError') obluguje wyplute bledy.
GetMessageError(..)
{
//uruchamiam funkcje 'GetMessageError2' z DLL-ki, ktora powinna obsluzyc bledy powstale w 'Func2' jezeli zwrocila ona FALSE
//ponizej oblsuga bledow powstalych w 'Func1'
switch (giError)
{
case ERROR_TRANSFORMFILE:
/* gsError juz ustawione w 'Func1' */
break;
case ERROR_RENAMEFILE:
gsError = "Can't rename file." + gsError;
break;
case PGSM_ERROR_INP_REMOVEFILE:
gsError = "Can't remove file." + gsError;
break;
default:
gsError = ERR_MSG_UNKNOWN;
break;
}
Problem moj polega na tym ze program nie przechwytuje bledow powstalych w DLL-ce.
Na przyklad jezeli mam zle dane (np za dluga linijka) w pliku ktory powinien zostac przetworzony przez 'Funk2'. Wyskakuje wtedy Blad krytyczny bez stringu wypisujacego wiadomosc o bledzie z wnetrza funcji 'Funk2' a dokladniej z 'GetMessageError2', nastepnie program sie zamyka.
Nie mam pomyslu jak wszystko poustawiac po kolei zeby moj program przechwytywal bledy powstle w DLL-ce. Prosze o pomoc...