Um diese API-Funktion in Ihren eigenen Projekten verwenden zu können, muss Sie zuerst im Kopf der Datei
deklariert werden. Zusätzlich werden noch einige Konstanten und eine Funktion benötigt. Ich empfehle Ihnen,
diese Deklarationen und die Funktion in einem Modul zu plazieren, da die Funktion dann später im gesamten Projekt
zur Verfügung steht.
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000
Private Const FORMAT_MESSAGE_FROM_HMODULE = &H800
Private Const FORMAT_MESSAGE_FROM_STRING = &H400
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF
Function WinAPIError(ByVal lLastDLLError As Long) As String
Dim sBuff As String
Dim lCount As Long
sBuff = String$(256, 0)
lCount = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, 0, lLastDLLError, 0&, sBuff, Len(sBuff), ByVal 0)
If lCount Then WinAPIError = Left$(sBuff, lCount)
End Function
Der Aufruf der Funktion ist nicht schwer. Hier ein kleines Beispiel, bei dem der API-Funktion
"
GetPrivateProfileString" (siehe
INI-Dateien lesen und
schreiben) u.a. kein Dateiname übergeben wird und es zur Fehlermeldung "Der angegebene Pfad wurde nicht
gefunden" führt:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Sub Form_Load()
Dim Buf As String
Dim Result As Long
Buf = String(255, 0)
Result = GetPrivateProfileString("", "Test", "", Buf, Len(Buf), "")
If Result = 0 Then 'Wenn irgendetwas nicht geklappt hat...
MsgBox WinAPIError(Err.LastDllError) '...den genauen Fehler ermitteln
End If
End Sub
Achtung: Leider funktioniert die genaue Fehler-Ermittlung nicht bei allen API-Funktionen; manche
geben einfach nur "Der Vorgang wurde ausgeführt" zurück.
|
Quellen: SHADOWare.de, vbAccelerator.com
Letzte Änderung: 17.00
|
©2000 by SHADOWare, Thomas Bachem
|