GetAPIError - Windows Only
Verfasst: 02.01.2011 06:35
Viele API-Funktionen geben Fehler über die GetLastError_() API wieder.
Die Auswertung ist doch recht umständlich, deshalb hab ich mal was gebastelt,
das diese Error auswertet und in Textform als Debugger-Warnung ausgibt.
Wenn der Debugger aus ist, wird kein Code zur Exe hinzugefügt.
GetAPIError() sollte möglichst in derselben Zeile stehen, wie der API-Aufruf (siehe Beispiele).
Die Fehlerzeile wird markiert und der Fehlertext ausgegeben. Entweder im Source des
externen Debuggers oder im Fehlerbericht der IDE.
Vielleicht kann es ja jemand brauchen 
Die Auswertung ist doch recht umständlich, deshalb hab ich mal was gebastelt,
das diese Error auswertet und in Textform als Debugger-Warnung ausgibt.
Wenn der Debugger aus ist, wird kein Code zur Exe hinzugefügt.
GetAPIError() sollte möglichst in derselben Zeile stehen, wie der API-Aufruf (siehe Beispiele).
Die Fehlerzeile wird markiert und der Fehlertext ausgegeben. Entweder im Source des
externen Debuggers oder im Fehlerbericht der IDE.
Code: Alles auswählen
; Windows only
; PB 4.3x +
CompilerIf #PB_Compiler_Debugger
Import ""
PB_DEBUGGER_SendWarning(Message.p-ascii)
EndImport
Macro GetAPIError()
Define __APIError_Error__, __APIError_Buffer__
__APIError_Error__ = GetLastError_()
If __APIError_Error__
MessageBeep_(#MB_ICONERROR)
If FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER | #FORMAT_MESSAGE_FROM_SYSTEM, 0, __APIError_Error__, 0, @__APIError_Buffer__, 0, 0)
PB_DEBUGGER_SendWarning(PeekS(__APIError_Buffer__))
LocalFree_(__APIError_Buffer__)
EndIf
EndIf
EndMacro
CompilerElse
Macro GetAPIError()
EndMacro
CompilerEndIf
; ######################################################################################
; Beispiel
; fehler produzieren
SetLastError_(6) : GetAPIError() ; ungültiges Handle
; hilfsmacro
Macro IfError(functioncall)
If Not functioncall
GetAPIError()
EndIf
EndMacro
Define lpBuffer.s, nSize
IfError(GetUserName_(@lpBuffer, @nSize)) ; Buffer zu klein
Debug lpBuffer
lpBuffer = Space(50) : nSize = 50
IfError(GetUserName_(@lpBuffer, @nSize))
Debug lpBuffer
