Toon posts:

[C++] Opvangen van exception bij aanroepen API

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag mensen,

ik zou graag een API willen aanroepen voor een bepaalde hardwareinterface die in de comuter zit. Nu werkt dit allemaal goed, tot op het moment dat ik het programma laat lopen op een computer waar deze hardware niet in zit. Doe ik dat toch, dan krijg ik deze error:

"The application failed to initialize properly (0xc0000142). Click on OK to terminate the application"

Ik zou deze error graag willen opvangen dmv try & catch.
De API die ik aanroep is: DIG_Grp_Config(1,3)

Deze geeft een 0 terug bij een succesvolle aanroep, alles erboven of eronder betekent dat er iets fout is gegaan. Als ik vervolgens een try & catch methode toepas blijf ik toch dezelfde error krijgen. Ik controleer op deze manier:

int iStatus = DIG_Grp_Config(1,3)
if (iStatus != 0) throw "Error"

Hoe kan ik dit oplossen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Is dat je werkelijke code:
code:
1
throw "error";


Je moet -afaik- toch een object gooien, en niet een string ?

code:
1
2
3
4
5
6
7
8
9
10
11
try
{
  if( iStatus != 0 )
  {
       throw new MyException ("error");
  }
}
catch( MyException ex )
{
   // blaat
}

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

whoami schreef op 25 februari 2004 @ 13:42:
Is dat je werkelijke code:
code:
1
throw "error";


Je moet -afaik- toch een object gooien, en niet een string ?
In C++ mag je alles mikken wat je wilt, dus ook zo:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try
  {
  if(SituationA)
    throw "Wat a big load of crap!";
  if(SituationB)
    throw 684;
  else
    throw "Damn it doesn't work!";
  }
catch(const char* p_Text)
  {
  cout << "Exception: " << p_Text << endl;
  }
catch(int p_ErrorCode)
  {
  cout << "Error code: " << p_ErrorCode << endl;
  }

Of het goede programmeerpraktijk is laten we even buiten beschouwing :+

Professionele website nodig?


Verwijderd

Topicstarter
Het maakt inderdaad weinig uit wat ik throw, feit blijft dat dit niet werkt...

In VC++ kan ik een lijstje opvragen waar de exceptions staan. Deze staat er onder andere in: c0000142 - DLL Initialization Failed - Stop if not handled

Maar hoe kan ik een handler maken die c0000142 opvangt?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Wat wil je nu eigenlijk throwen en wie gaat het volgens jou vangen? :?

Ik heb subtiel het gevoel dat je niet veel snapt van het try/throw/catch mechanisme?

Professionele website nodig?


Verwijderd

Topicstarter
Tijdens het aanroepen van een API krijg ik een systeemerror. Deze wil ik graag opvangen zodat ik er een eigen error handler voor kan maken (in een later stadium maak ik een exception class waarin ik mijn errors verder verwerk).

Het probleem is nu dat als de hardware niet aanwezig er een cryptische error wordt gegeven door het systeem en het programma abrupt wordt afgesloten. Ik wil ten eerste een duidelijke error kunnen geven en en ten tweede moet het programma doorlopen, ongeacht of er nou wel of niet een fout optreedt.

De exception treedt op omdat hij NTDLL.DLL niet kan initializeren, hij geeft hierbij als code 0xC0000142. Ik moet deze exception dus opvangen wil ik verder kunnen gaan met mijn programma. En mij lijkt toch echt dat ik dat met catch moet doen. Alleen mijn probleem is dat ik niet weet hoe ik dit moet doen.

[ Voor 6% gewijzigd door Verwijderd op 25-02-2004 14:05 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Maar dan zoek je toch gewoon dit:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct MyDllException {};

void LoadDll()
{
try
  {
  .....
  if(Error)
    throw MyDllException;
  .....
  }
catch(MyDllException &)
  {
  MessageBox(NULL, "Some problem occurred loading a DLL", "Error", MB_ICONERROR);
  }
}

Of ben ik nu gek? :?

Professionele website nodig?


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Als ik het goed begrijp treedt er een fout op in de api call en komt er niet eens een foutcode terug. Als dat het geval is, dan denk ik eigenlijk dat het niet oplosbaar is zonder de source code van die api te veranderen...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

SWfreak schreef op 25 februari 2004 @ 14:31:
Als ik het goed begrijp treedt er een fout op in de api call en komt er niet eens een foutcode terug. Als dat het geval is, dan denk ik eigenlijk dat het niet oplosbaar is zonder de source code van die api te veranderen...
Zoals ik het begrijp geeft die API call netjes een errorcode terug, waarop hij een stringconstante 'throwt' en die nergens catcht, waarop de runtimes netjes een application shutdown uitvoeren zoals de C++ standaarden dat voorschrijven bij een uncaught exception.

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Heb je exception handling wel ingeschakeld ( als je met VS werkt )?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1