Error: Variable used without being declared

  • Mein Programm hat (einschließlich Kommentaren) 1026 Zeilen.
    Unter anderem ist diese Passage enthalten:

    Protokoll("xxxxxx")
    GUISetState()
    Protokoll("yyyyyy")

    Ungefähr in 80 % der Fälle arbeitet das Programm einwandfrei. Aber eben in den restlichen 20% der Starts erscheint zunächst das mit GUISetState() zu eröffnende Fenster und dann sofort diese Fehlermeldung:

    AutoIt-Error
    Line 4680 (File "D:\AU\Desktop2\Desktop2.exe")
    Error: Variable used without being declared


    [Blockierte Grafik: http://www.autoit.de/index.php?page=Attachment&attachmentID=24682&h=2927f7171e4a2f175caebc76933ba5f1a791806e]

    Und in meiner Protokoll-Datei steht als letztes die Zeile "xxxxxx".

    Wie kann ich die Ursache für diesen Fehler ermitteln?
    Wie kann ich mir die Zeile 4680 ansehen?

    Vielen Dank schon mal für eine Antwort.

  • Das mit den Zeilennummern hat folgenden Grund:
    Du bindest zusätzliche AutoIt-Funktionen per #include-Befehl ein.
    Dieser ist ein Präprozessor-Befehl welcher vor dem eigentlichen Kompilieren ausgeführt wird.
    In diesem Fall nimmt er einfach die angegeben Datei und trägt deren Inhalt an diese Stelle in dein Skript ein.
    Dadurch verlängert sich dein Skript natürlich entsprechend.
    Dann wird das Skript kompiliert und ausgeführt. Die Zeilennummern bei Fehlern beziehen sich dann auf das vollständige erweiterte Skript.

    Wie nun die fehlerhafte Zeile finden?
    Nun der einfachste Weg ist: Aktuelles AutoIt und aktuelles Scite4Autoit installieren.
    Dann kannst du an den Anfang deines Skriptes folgendes schreiben:

    [autoit]

    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/mo /SCI=1

    [/autoit]


    Das sorgt dafür, dass wenn du es kompilierst zusätzlich eine neue Datei *_stripped.au3 erstellt wird, welche das Skript mit aufgelösten includes darstellt.
    Dort kannst du dann nach deiner Zeilennummer schauen.

  • Lieber Aspirn Junkie und lieber Jasfar,
    ich war nach meiner Frage zwei Tage außer Haus und bedanke mich deshalb erst jetzt für Eure Antworten.
    Das werde ich jetzt alles ausprobieren.
    Recht herzlichen Dank!

  • Nachdem ich, wie von Aspirn Junkie empfohlen, das aktuelle AutoIt und das aktuelle SciTE installiert und mein Programm mit der Stripper-Anweisung kompiliert habe, konnte ich die Stelle in meinem Programm den Fehleridentifizieren.
    Mein Programm sah so aus:

    [autoit]


    ...
    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_MausMove') ; der Mauszeiger wurde bewegt
    ...
    Protokoll("xxxxxx")
    GUISetState()
    Protokoll("yyyyyy")
    Global $Cursor=1
    ...
    Func _MausMove()
    If $cursor=0 Then
    ...

    [/autoit]


    Wenn ich also - während GUISetState() das Fenster aufgebaut hat - bereits die Maus bewegt habe, ist das Programm unmittelbar nach Beendigung von GUISetState() nicht zu Protokoll("yyyyyy") sondern zur Funktion _MausMove() gesprungen. Da war natürlich $Cursor noch nicht definiert und If $cursor=0 hat den Fehler gebracht.

    Über den Weg von Jasfar hätte ich es bestimmt genauso gefunden. Aber so habe ich gleich mal mei AutoIt aktualisiert.
    Nochmals vielen Dank Euch beiden.

    Einmal editiert, zuletzt von DOheim (23. September 2014 um 11:19)