Seite 1 von 1

Wie wendet man GetLastError richtig an?

Verfasst: 25.03.2005 14:17
von Gamer
Brauche dringend den Grund, warum eine bestimmte API-Sache nicht funktioniert.

Wie wendet man das konkret an?

Verfasst: 25.03.2005 14:24
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?

Verfasst: 25.03.2005 14:33
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()

Verfasst: 25.03.2005 14:55
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()

Verfasst: 25.03.2005 14:57
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: