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
