ObjCreate .send crash

  • Hey,

    vorab muss ich sagen, dass ich mich relativ schlecht mit ObjCreate in AutoIT auskenne...

    Ich lasse in einer Whileschleife regelmäßig den gleichen JSON string abfragen.

    Das funktioniert auch super, allerdings stürzt das Programm sehr zufällig in der $Object.send Zeile ab.(kann Stundenlang gut gehen)

    Errorcode: The requested action with this object has failed.

    Wie kann es sein, dass das Programm abstürzt obwohl es bei einem @error nicht weitermachen soll ? Gibts noch andere Optionen den Crash zu umgehen ?


    Ich habe das Gefühl, dass das Programm öfter crasht wenn ich irgendwas nebenbei im inet mache, Youtube oder nen Game zocken. Kann das sein oder lieg ich da falsch ? ^^

    Außerdem habe ich öfter mal was von einem "ErrorChecker"(ObjEvent) gelesen, das is ein recht kurzer Code. Damit kann ich allerdings garnichts anfangen -.-

  • Außerdem habe ich öfter mal was von einem "ErrorChecker"(ObjEvent) gelesen, das is ein recht kurzer Code. Damit kann ich allerdings gar nichts anfangen -.-

    Du meinst wahrscheinlich einen COM-Error-Handler.

    Dazu am Anfang des Skriptes folgende Zeile einfügen :

    Global $objCOMError = ObjEvent("AutoIt.Error","_COM_Error")

    und die entsprechende Funktion (kann am Ende des Skriptes stehen) :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Musashi Genau das habe ich gemeint.

    Ich habe in meinem Script mehrere JSON Abfragen/Befehle. Muss ich hinter jeden den den $objCOMError abfragen ?

    Bis jetzt bekomme ich immer den Error:



    Kannst du damit was anfangen bzw weißt, was los ist ? :D

    *das Script stürzt nicht ab und die JSON abfrage wird auch bearbeitet, obwohl der Error kommt.

    Oder muss ich vor die Obj.send abfrage die Errorfunction einfügen und mir das ganze in eine .txt schreiben lassen, solange bis das Script crasht. Dann sollte ich doch als letztes den Error sehen, was jetzt zum Crash geführt hat ?

    Einmal editiert, zuletzt von Lanealine (24. September 2019 um 17:18)

  • Musashi : Genau das habe ich gemeint.

    Ich habe in meinem Script mehrere JSON Abfragen/Befehle. Muss ich hinter jeder/m den $objCOMError abfragen ?

    Nein, der Errorhandler springt von sich aus an, wenn ein COM-Fehler auftritt.

    Kannst du damit was anfangen bzw weißt, was los ist ? :D

    Sehr aussagekräftig ist die Meldung ja nicht gerade ^^.

    Dein 'Skript' ist auch nur ein Fragment ohne echte Daten - daher weiß ich auf den ersten Blick nicht "was los ist".

    Hast Du es alternativ mal mit der großartigen WinHttp.au3 von trancexx versucht ? :

    https://github.com/dragana-r/autoit-winhttp/releases

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich probier noch etwas mit rum, vielleicht bekommen wa ne "bessere" Errormeldung :D

    Sehr aussagekräftig ist die Meldung ja nicht gerade ^^ .

    Sry, habs verkackt :D Habe die Function ans Ende von meinem Main Whileloop eingefügt. Ich wusste nicht, dass die Function von alleine abgefragt wird.

    Ich lass es jetzt mal laufen, bis das Script "richtig" crasht.

    Aber nochmal zum Verständnis, ich muss die ObjEvent Function NICHT selber abfragen, sondern die wird jedesmal abgefragt sobald etwas mit einem Obj gemacht wird(ObjCreate, Obj.setrequestheader, Obj.send...) ?

    Hast Du es alternativ mal mit der großartigen WinHttp.au3 von trancexx versucht ? :

    https://github.com/dragana-r/autoit-winhttp/releases

    Habe ich noch nicht getestet, kann ich damit auch Json strings senden/abfragen ?

    Einmal editiert, zuletzt von Lanealine (24. September 2019 um 17:44)

  • Aber nochmal zum Verständnis, ich muss die ObjEvent Function NICHT selber abfragen, sondern die wird jedesmal abgefragt sobald etwas mit einem Obj gemacht wird(ObjCreate, Obj.setrequestheader, Obj.send...) ?

    Du kannst den ErrorHandler auch einfach leer lassen, dann läuft das Skript an nach der Stelle weiter wo es gecrasht ist. Aber er sollte auf jeden Fall vorhanden sein (also die Funktion, und die Registrierung des Event-Handlers) da ansonsten dein Skript hardcrasht.

    Die Abspeicherung in eine Variable ist übrigens (glaube ich) immer noch erforderlich, da der Handler sonst nicht ordnungsgemäß funktioniert.

    Also Registrieren alleine mit ObjEvent reicht nicht, der Rückgabewert von ObjEvent muss in eine Variable gespeichert werden, was bei Musashis Skript der Fall ist.

  • Habe es jetzt so gemacht:

    ist das so richtig ?

    Kann das Script jetzt nichtmehr komplett an der Obj.send Line crashen ?

  • ist das so richtig ?

    Ja, Du kannst den COM-Error auch in einer Datei speichern.

    Ich weiß nicht wann Du was in $ScriptNumber einträgst, ggf. wäre ein Timestamp besser, also z.B. :

    FileWrite(@WorkingDir & "\Error_COM-Error - " & @YEAR & @MON & @MDAY & "_" & @HOUR & @MIN & @SEC & ".txt", _

    (ein Sleep(2000) in der Funktion könnte für die Testphase dann auch nicht schaden)

    Kann das Script jetzt nicht mehr komplett an der Obj.send Line crashen ?

    Ich möchte nicht bestätigen, dass jede Form von Crash verhindert wird, aber i.d.R. schon.

    Das ist auf Dauer natürlich keine Lösung - man sollte schon versuchen den Fehler zu finden und zu beseitigen ;).

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hast Du es alternativ mal mit der großartigen WinHttp.au3 von trancexx versucht ? :

    https://github.com/dragana-r/autoit-winhttp/releases

    Habe ich noch nicht getestet, kann ich damit auch Json strings senden/abfragen ?

    Da bin ich mir ziemlich sicher !

    Die WinHttp.au3 bringt eine umfangreiche Hilfedatei inkl. Beispiele mit. Schau einfach mal 'rein ;).

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Vielen Dank erstmal euch beiden für eure Hilfe !

    Ich habe das Programm noch etwas laufen lassen und habe jetzt einen "richtigen" Errorcode bekommen.

    Wisst ihr, was mir diese Fehlermeldung sagen möchte ? :D