vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Entwicklungsumgebung · Fehlerbehandlung   |   VB-Versionen: VB4, VB5, VB613.09.02
Win32 API Fehlermeldung

Eine Funktion, mit der sich der letzten Win32 API Fehler als Visual Basic Fehlermeldung ausgeben lässt.

Autor:   Jan SchöneboomBewertung:     [ Jetzt bewerten ]Views:  22.208 
www.silja-software.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Manchmal wäre es hilfreich den letzten Win32 API Fehler als VB Fehlermeldung auszugeben.

Um vielleicht einfach nur sein Programm besser debuggen zu können. Oder um einfach nur den späteren Benutzer zu signalisieren, das ein Fehler aufgetreten ist.

Ich habe hierfür eine Funktion geschrieben, die immer dann aufgerufen werden sollte, wenn eine Win32 API Funktion fehlgeschlagen ist.

Option Explicit
 
' Benötigte API-Deklarationen
Private Declare Function FormatMessage Lib "kernel32" _
  Alias "FormatMessageA" ( _
  ByVal dwFlags As Long, _
  lpSource As Any, _
  ByVal dwMessageId As Long, _
  ByVal dwLanguageId As Long, _
  lpBuffer As Long, _
  ByVal nSize As Long, _
  Arguments As Long) As Long
 
Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
 
Private Declare Function LocalFree Lib "kernel32" ( _
  ByVal hMem As Long) As Long
' ----------------------------------------------------
' Letzten Fehler einer WinAPI Funktion im Klartext
' ermitteln
' ----------------------------------------------------
Public Sub RaiseLastWin32Error()
  Const UNKNOW_WIN32API_ERROR = _
    "Ein unbekannter Win32 API Fehler ist aufgetreten."
  Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
  Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
  Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
  Const LANG_NEUTRAL = &H0
  Const ERROR_SUCCESS = 0&
 
  Dim Buffer As Long
  Dim Length As Long
  Dim ErrorMsg As String
  Dim LastError As Long
 
  ' Letzten Win32 API Fehler ermitteln
  LastError = Err.LastDllError
 
  ' Win32 API Fehler von Windows in einen Text ausgeben
  Length = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER Or _
    FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, _
    0&, LastError, LANG_NEUTRAL, Buffer, 0, 0)
 
  ' Prüfen ob letzter Fehler wirklich ein Fehler war
  ' und prüfen ob FormatMessage einen Text bereit
  ' gestellt hat
  If (LastError <> ERROR_SUCCESS) And (Length <> 0) Then
    ErrorMsg = String$(Length, vbNullChar)
    Call CopyMemory(ByVal ErrorMsg, ByVal Buffer, Length)
    Call LocalFree(Buffer)
  Else
    ErrorMsg = UNKNOW_WIN32API_ERROR
  End If
 
  ' Fehlermeldung ausgeben
  Call Err.Raise(Number:=vbObjectError + LastError, _
    Source:="RaiseLastWin32Error", Description:=ErrorMsg)
End Sub
' ----------------------------------------------------

Dieser Tipp wurde bereits 22.208 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel