Visual Basic 6

API-Fehler richtig auswerten

Fehlerbehandlung nach einem API-Aufruf

Die meisten API-Funktion liefern nach getaner Arbeit einen Status-Code zurück, der besagt, ob die Ausführung korrekt verlaufen ist oder nicht. Ist ein Fehler aufgetreten, so kann man den richtigen Fehlercode NUR über die LastDLLError-Eigenschaft des Err-Objekts abfragen! Wie in einem MSDN-Artikel beschrieben ist, sollte man als VB-Programmierer niemals auf den Gedanken kommen von der API-Funktion GetLastError Gebrauch zu machen, denn auch die VB-Runtime macht von der API regen Gebrauch und es ist nicht gesagt, dass der letzte Fehler der des eigenen API-Aufrufs war.

Wenn denn dann ein API-Fehler aufgetreten ist und die korrekte Fehlernummer über LastDLLError vorliegt, so wäre eine aussagekräftige Fehlerbeschreibung nicht schlecht. Da API-Fehler nichts mit VB-Fehlern zu tun haben, wird die Description-Eigenschaft des Err-Objekt leider leer sein. Zuständig für die Lieferung des Klartextes ist wiederum eine API-Funktion: FormatMessage.

Beispiel:

Deklarationen

Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000&
Private Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200&
Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK As Long = &HFF&
Private Const LANG_USER_DEFAULT As Long = &H400&

Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" ( _
   ByVal dwFlags As Long, _
   ByRef lpSource As Any, _
   ByVal dwMessageId As Long, _
   ByVal dwLanguageId As Long, _
   ByVal lpBuffer As String, _
   ByVal nSize As Long, _
   ByRef Arguments As Long) As Long

Prozedur

Public Function GetAPIErrorDescription( _
   ByVal lngLastDllError As Long) As String

   Dim strBuffer As String
   Dim lngLen As Long
   Dim lngFlags As Long

   strBuffer = Space$(1024)
   lngFlags = FORMAT_MESSAGE_FROM_SYSTEM Or _
      FORMAT_MESSAGE_MAX_WIDTH_MASK Or _
      FORMAT_MESSAGE_IGNORE_INSERTS

   lngLen = FormatMessage(lngFlags, ByVal 0&, lngLastDllError, _
      LANG_USER_DEFAULT, strBuffer, Len(strBuffer), 0)

   If lngLen > 0 Then
      GetAPIErrorDescription = Left$(strBuffer, lngLen)
   End If

End Function


Aufruf

Public Function Test()

   Dim lngRetVal As Long

   lngRetVal = <Aufruf der gewünschten API-Funktion>

   If lngRetVal <> 0 And Err.LastDllError <> 0 Then
      Err.Raise vbObjectError + Err.LastDllError, , _
         GetAPIErrorDescription(Err.LastDllError)
   End If

End Function
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

Keine Kommentare bislang...

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 21

  • Datum: 11.04.2005
    Kategorie: Visual Basic 6
    Zugriffe: 2.080
    Kommentare: 0
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei