GetAPIError - Windows Only

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

GetAPIError - Windows Only

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: GetAPIError - Windows Only

Beitrag von c4s »

Sieht nützlich aus, danke!
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: GetAPIError - Windows Only

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GetAPIError - Windows Only

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3054
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: GetAPIError - Windows Only

Beitrag 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.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: GetAPIError - Windows Only

Beitrag von edel »

Dafuer bin ich viel zu faul :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GetAPIError - Windows Only

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Re: GetAPIError - Windows Only

Beitrag von dige »

@TS-Soft: Danke - das ist genial. Verdammt, ich habe keine Ahnung wie/was Du da machst - Respekt!
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten