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)