Toon posts:

[VB6] Programma DLL afbreken tijdens uitvoering?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Euj iedereen,

Wie gaat mij uitleggen hoe ik in een DLL, als ik merk dat er een bepaalde err.number ontstaat, de uitvoering kan stoppen? Het zal wel weer heel simpel zijn, maar je moet het wel even weten ;)

tnx!

  • Edd
  • Registratie: Januari 2001
  • Laatst online: 15-09 10:44

Edd

Meestal zet je dan na de Function header de volgende code:
code:
1
On Error GoTo errHandler

Onderaan, voor je End Function zet je dan:
code:
1
2
3
4
errHandler:
If Err.Number = -123456 Then
   Exit Function
End If

Vervang die -123456 door jouw gezochte err.number. Die 'errHandler' kan je vervangen door van alles, als ze maar gelijk zijn. Vergeet niet dat wanneer de functie waar de fout in optreed deze dan ook op te vangen. Daarom is het natuurlijk altijd het beste om de gevangen Err.Number terug te geven aan de aanroeper.

-


Verwijderd

Topicstarter
Zo zit het niet... het gaat om een DLL met allemaal public subs erin. Ik doe bij elke sub een
code:
1
On Error Resume Next

en telkens, na een bewerking die een fout op zou kunnen leveren
code:
1
2
3
if err.number <> 0 then
  call errorhandling
end if

errorhandling is dan een private sub met daarin allerlei msgboxes enzo. Nu moet ik, in de sub errorhandling, als er echt een master-fout optreedt, gewoon de hele dll kunnen killen! Of zeg ik nu iets stoms?

  • Edd
  • Registratie: Januari 2001
  • Laatst online: 15-09 10:44

Edd

Oftewel je wilt een DLL met zelfmoordneigingen?? :)

Meestal wordt dat automatisch gedaan door Windows en zou eerlijk gezegd niet zo kunnen vertellen hoe dat zo zou kunnen. Maar kan er zo'n erge fout optreden dat je de hele DLL dient te killen en niet later weer is kan proberen? of wil je gewoon dat al die msgboxen opkomen?

-


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Een deel kun je (soms) oplossen door niet errors af te vangen, maar invoer te checken.
Maja niet alles is altijd goed van te voren te controlleren.
Wat je kan doen, als je graag de errorhandling in 1 sub wil houden, van die sub een function maken die een boolean teruggeeft die aangeeft of de rest van de functie nog uitgevoerd moet worden, of dat je er direct uit wilt springen (Exit Function, of de andere manieren om "zo snel mogelijk uit je huidige functie te springen").
Eventueel met een module-level boolean (misschien niet heel netjes, wel verdraait handig.. If bFatalError Then Exit Function is makkelijker schrijven dan overal ifjes ed.)

Afhankelijk van hoe je dll in elkaar zit ed. kun je ook nog vanuit de dll een event laten raisen zodat de app weet dat er iets goed mis zit ;)

Of gewoon bruut End neer gooien :)

Exact expert nodig?


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Je kan ook in de Errorhandling functie een RaiseEvent plaatsen en deze dan in je programma (van waaruit je aan het DLL refereert) afvangen...

Mabey that should do the trick....

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 15-09 10:30
Het is inderdaad netter (of eigenlijk: verpicht) om fouten die in een DLL onstaan terug te koppelen naar het aanroepende programma. Als je knetterhard de DLL gaat afsluiten kan dit namelijk ernstige gevolgen hebben voor het aanroepende programma of zelfs je hele systeem.

MAar het blijft moeilijk om een goede errorhandling in te bouwen in DLL's. Het gebruik van RaiseEvent is inderdaad de beste (en enige juiste?) oplossing...
Pagina: 1