Seite 1 von 1

GetAPIError - Windows Only

Verfasst: 02.01.2011 06:35
von ts-soft
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.

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
Vielleicht kann es ja jemand brauchen :wink:

Re: GetAPIError - Windows Only

Verfasst: 02.01.2011 13:48
von c4s
Sieht nützlich aus, danke!

Re: GetAPIError - Windows Only

Verfasst: 02.01.2011 14:52
von HeX0R
Das hier finde ich sehr nützlich:

Code: Alles auswählen

Import ""
  PB_DEBUGGER_SendWarning(Message.p-ascii)
EndImport
Wie findet man denn die internen Prozeduren?

Re: GetAPIError - Windows Only

Verfasst: 02.01.2011 14:57
von ts-soft
HeX0R hat geschrieben:Wie findet man denn die internen Prozeduren?
Mit den passenden Tools, die es seit längerer Zeit auf RealSource gibt :wink:
http://www.realsource.de/index.php/down ... or-pb-libs

Re: GetAPIError - Windows Only

Verfasst: 02.01.2011 15:03
von HeX0R
ts-soft hat geschrieben: Mit den passenden Tools, die es seit längerer Zeit auf RealSource gibt :wink:
http://www.realsource.de/index.php/down ... or-pb-libs
Ui, das is ja genial :allright:

Vielleicht hättet ihr irgendwas in die Beschreibung setzen sollen,
unter PB Tools for PB libs kann man sich irgendwie wenig vorstellen.

Re: GetAPIError - Windows Only

Verfasst: 02.01.2011 15:06
von edel
Dafuer bin ich viel zu faul :D

Re: GetAPIError - Windows Only

Verfasst: 02.01.2011 15:19
von ts-soft
HeX0R hat geschrieben:Vielleicht hättet ihr irgendwas in die Beschreibung setzen sollen,
unter PB Tools for PB libs kann man sich irgendwie wenig vorstellen.
Ich denke mal, für die Leute, die damit was anfangen können, reicht die Beschreibung
und den Rest an die Hand zu nehmen, haben weder edel noch ich die Zeit und Lust :mrgreen:

Re: GetAPIError - Windows Only

Verfasst: 04.01.2011 13:54
von dige
@TS-Soft: Danke - das ist genial. Verdammt, ich habe keine Ahnung wie/was Du da machst - Respekt!