Als die Fehler Sprechen lernten...
Fehlerbeschreibungen zu Windows API Fehlernummern ermitteln
Für viele Funktionen des Windows API lässt sich über die LastDllError-Eigenschaft des Err-Objekts ein Fehlercode abfragen. Eine weitere API Funktion liefert die aussagekräftige Beschreibung dazu...
Viele Funktionen des Windows API geben über ihre direkte Rückgabe nur an, ob sie erfolgreich abgeschlossen wurden oder fehlgeschlagen sind. Den wahren Grund für einen Fehlschlag liefert die LastDllError-Eigenschaft des Err-Objekts in Form einer Fehlernummer.
Auch wenn in der MSDN immer von GetLastError die Rede ist, so ist diese API Funktion unter VB nicht zuverlässig, da man unter Umständen den letzten Fehler eines API Aufrufs der VB Runtime auswertet.
So eine Fehlernummer alleine ist aber meist wenig aussagekräftig und dem Err-Objekt fehlt eine entsprechende Eigenschaft, die den passenden Fehlertext zum API Fehlercode zurückgibt. Mithilfe der API Funktion FormatMessage, kann man hier allerdings nachhelfen und kommt so doch noch zu einer meist aussagekräftigen Beschreibung des Fehlers und kann diesen besser beheben:
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 Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000 Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK As Long = &HFF Private Const LANG_USER_DEFAULT As Long = &H400& Public Function ErrorDescription(ByVal Number As Long) As String Dim lBuffer As String Dim lRet As Long lBuffer = Space$(512) lRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM Or _ FORMAT_MESSAGE_MAX_WIDTH_MASK, _ ByVal 0&, Number, LANG_USER_DEFAULT, _ lBuffer, Len(lBuffer), ByVal 0) If CBool(lRet) Then ErrorDescription = Left$(lBuffer, lRet) End If End Function
Download
- Modul modDllError (moddllerror.zip - 1 KB)