Wie wendet man GetLastError richtig an?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Wie wendet man GetLastError richtig an?

Beitrag von Gamer »

Brauche dringend den Grund, warum eine bestimmte API-Sache nicht funktioniert.

Wie wendet man das konkret an?
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag von Gamer »

Also ich habe jetzt das hier gefunden:

Code: Alles auswählen

Procedure.s ShowError () 
  error = GetLastError_ () 
  If error 
    length = FormatMessage_ (#FORMAT_MESSAGE_FROM_SYSTEM, #NULL, error, 0, AllocateMemory (255), 255, #NULL) 
    If length > 1 ; Some error messages are "" + Chr (13) + Chr (10)... stoopid M$... :( 
        e$ = PeekS (MemoryID (), length - 2) 
    Else 
        e$ = "Unknown error!" 
    EndIf 
    FreeMemory (0) 
    ProcedureReturn e$ 
  Else 
    ProcedureReturn "No error has occurred!" 
  EndIf 
EndProcedure 
Allerdings beschwert er sich über "MemoryID()"... fehlt wohl bei mir eine Lib?
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Gamer hat geschrieben: Allerdings beschwert er sich über "MemoryID()"... fehlt wohl bei mir eine Lib?
MemoryID() wurde mit der Änderung des AllocateMemory() Befehls in PB v3.90 abgeschafft.

Das Beispiel müsste m.E. korrekt so aussehen (ohne Gewähr :wink: ):

Code: Alles auswählen

Procedure.s ShowError () 
  error = GetLastError_ () 
  If error 
    *MemoryID = AllocateMemory (255)
    length = FormatMessage_ (#FORMAT_MESSAGE_FROM_SYSTEM, #NULL, error, 0, *MemoryID, 255, #NULL) 
    If length > 1 ; Some error messages are "" + Chr (13) + Chr (10)... stoopid M$... :( 
        e$ = PeekS (*MemoryID, length - 2) 
    Else 
        e$ = "Unknown error!" 
    EndIf 
    FreeMemory (0) 
    ProcedureReturn e$ 
  Else 
    ProcedureReturn "No error has occurred!" 
  EndIf 
EndProcedure 

Debug ShowError()
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Hehe,
"ohne Gewähr" - hört sich fast so an als wenn du wusstest das da das FreeMemory falsch ist ;)

Code: Alles auswählen

Procedure.s ShowError() 
  Protected Error,*MemoryID,e$,Length
  Error = getlasterror_() 
  If Error 
    *MemoryID = AllocateMemory(255) 
    If *MemoryID
      Length = FormatMessage_ (#FORMAT_MESSAGE_FROM_SYSTEM, #Null, Error, 0, *MemoryID, 255, #Null) 
      If Length > 1 ; Some error messages are "" + Chr (13) + Chr (10)... stoopid M$... :( 
        e$ = PeekS(*MemoryID, Length - 2) 
      Else 
        e$ = "Unknown error!" 
      EndIf 
      FreeMemory(*MemoryID)
      ProcedureReturn e$
    Else
      ProcedureReturn "Error while decoding Error("+Str(Error)+")"
    EndIf
  Else 
    ProcedureReturn "No error has occurred!" 
  EndIf 
EndProcedure 

Debug ShowError()
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Deeem2031 hat geschrieben:Hehe,
"ohne Gewähr" - hört sich fast so an als wenn du wusstest das da das FreeMemory falsch ist ;)
Nö, das war nicht Absicht. 8)
Habs halt nicht so mit Pointern & Co., aber das FreeMemory() hätte ich schon noch merken können - aber das Progi lief halt... :wink:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten