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.546 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |