Permalänk

VB6 felhantering...

Sitter med ett "gammalt" projekt som jag försöker få att fungera, skrivet i VB6.

Det är två ActiveX komponenter en "server-dll" och en ocx.

En grej som jag blev fundersam över är felhanteringen. Server-dll:en är kodad så att alla fel genererar en egen kodad "Err.Raise". Jag lyckas dock inte "fånga" den i ocx:en utan server-dll:en "smäller" och allt stannar. Vad är tanken här, kan inte få det att gå ihop hur det är tänkt att fungera riktigt...?

Typ så här då:

' SERVER-DLL Private Sub HereComesAnError() On Error Goto ErrHandler Dim n As Single ' Orsaka "division by zero" n = 10 / 0 Exit Sub ErrHandler: RaiseWExInfo "HereComesAnError" End Sub Private Function RaiseWExInfo(ByVal strCaller As String) Err.Raise ErrNumber, strCaller, Err.Description End Function

I ocx:en är det vanlig felhantering med "on error goto...". Problemet är alltså att jag i ocx:en vill presentera felet som sker i server-dll:en och att server-dll:en inte ska "dö".

Som sagt, missar jag "tänket" här eller måste det kodas om så server-dll:en returnerar en sträng bara som jag får hantera i ocx:en utan att köra Err.Raise i server-dll:en?

Hoppas ni hänger med...?!?

/Anders

Visa signatur

**************************
Om det fungerar för bra, installera om det...

Permalänk
Medlem

tja... du saknar lite variabler i din fina funktion

Private Function RaiseWExInfo(ByVal strCaller As String) Err.Raise ErrNumber, strCaller, Err.Description End Function

ErrNumber är inte definerad tex, du har nog tänkt på Err.Number dock...
men du måste även ha en "On Error..." i programmet som laddar in OCXen/DLLen.

Sub Main() on error resume next Dim iObject as Object set iObject = CreateObject("MinOCX.MinKlass") iObject.CrashMe if Err <> 0 then MsgBox "Ett fel uppstod under exekveringen av funktionen iObject.CrashMe!", vbExclamation set iObject = Nothing End Sub

Visa signatur

i7-4770K @ 3.5GHz - 32GB RAM - 2x 500GB SSD - 40TB HDD - GTX770