Script mit mehreren Unterscripten und globalen Variablen unverständliches Handling

  • Hallo.

    Habe ein Script geschrieben, welches nun noch erweitert werden sollte.
    Dieses hat derzeit ca. 1500Zeilen und sollte der Übersichtlichkeit halber in mehrere .au3 aufgeteilt werden.
    Bei C würde ich da einfach die Globalen Funktionen in Headerfiles deklarieren und Globale Variablen mit "extern" einbinden.
    Nur wie funktioniert das in Autoit?

    Ich habe einmal versucht das Script Schritt für Schritt zu splitten, nur leider findet er nun die Funktionen in den anderen .au3s nicht.
    Auch globale Variabeln die in der Main-Au3 als global definiert wurden kennt er nicht.

    Leider finde ich nirgends ein Beispiel wie so etwas zu händeln ist.
    Hoffe daher auf einen schnellen Tip, damit es weiter gehen kann ;)

    Grüße!

  • Weißt du was ein Minimalbeispiel ist?
    Dies ist ein Skript, welches so klein wie möglich ist aber den Fehler reproduziert.
    Es ist so geschrieben, dass es direkt ohne jegliche weitere Änderung lauffähig ist, so dass dein Problem von anderen direkt nachvollzogen werden kann.
    Der Vorteil für dich: Mehr und bessere Hilfe zu deinem Anliegen.

    Ansonsten allgemein zu multiplen Source's in AutoIt:
    Der Inhalt einer Datei welche per #Include eingebunden wird, wird direkt an diese Stelle im Code eingetragen.
    Am Ende wird dem Interpreter immer nur kompletter Code zur Verfügung gestellt.
    Wenn du also etwas auslagerst muss es an die einzubindende Stelle im Code auch passen.

  • Hallo.

    Ja, ich weiß was ein Minimalbeispiel ist.
    Da ich aber eine Herangehensweise und kein Bug suche, ist das ja obsolet.

    Sollte es denn so sein, dass wenn ich einen Codeteil in eine .au3 verschiebe und genau an der Stelle das include setze, alles so auffindbar sein sollte wie vorher?

  • Ich würd empfehlen, dass du
    #include-once in alle dateien schreibst und dann alle Dateien untereinander Includest, damit alles überall verfügbar ist.
    Dann kannst du arbeiten und alle deine Funktionen sorgen für keinen Fehler, und du kannst in aller Ruhe eine Datei ausführen, weil die anderen nur eingebunden werden, wenn sie nicht schon vorhanden sind.

  • Was du vorhast, habe ich mit meinem Team bereits erfolgreich umgesetzt. Wir nennen das ganze Modularer Aufbau. Hierbei separiert man das komplette Script in mehrer au3 Dateien. Dabei habe ich mich an die MVC Methode orientiert. Das ganze hat einfach den Vorteil, dass mein zum einen die Übersicht behält und zudem und zum anderen die Module in andere Scripte adaptieren ohne größere Änderungn vornehmen zu müssen.

    Wichtig bei dieser Methode ist, dass sich in den Modulen und Views ausschließlich Funktionen befinden. Daher empfehle ich auch mit GUIONEVENT zu arbeiten.
    Zudem ist es für die Übersicht empfehlenswert die Funktionen gemäß dem Modul zu kennzeichnen. z.B __m1_meine_Funktion() -> damit weiß man, dass sich die Funktion
    in modul1.au3 befindet.

    Die Ordner Struktur:

    Beispiel:

    Script.au3

    Spoiler anzeigen
    [autoit]


    #include 'module\loader.au3'

    [/autoit] [autoit][/autoit] [autoit]

    #Region AutoIt3Wrapper directives
    #AutoIt3Wrapper_OutFile= ...
    #AutoIt3Wrapper_Icon= ...
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    ;Hauptschleife, Funktionsaufrufe usw...

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    loader.au3

    Spoiler anzeigen
    [autoit]


    ;----------------------------------------------------------------------------------------------/
    ; Standart Includes
    ;----------------------------------------------------------------------------------------------/
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------------------------/
    ; MVC
    ;----------------------------------------------------------------------------------------------/
    #include "modul1.au3"
    #include "modul2.au3"
    #include "..\view\view1.au3"
    #include "..\view\view2.au3"

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------------------------/
    ; Settings
    ;----------------------------------------------------------------------------------------------/
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    ich hoffe ich konnte es halbwegs Verständlich erklären.

  • Hi da.

    Vielen Dank für die Tips!
    Komme arbeitstechnisch jetzt erst dazu zurück zu schreiben.

    Die Idee mit Include-once und dem Aufbau von 4ern werde ich mir definitiv im Kopf behalten.
    Habe nun auch heraus gefunden wo es hier hakt...

    Das Script funktionierte eigentlich auch zum Zeitpunkt der Anfrage hier.
    Ich nutze das ISN-Studio.
    Bei diesem gibt man bei den Projektdaten die Hauptdatei an.
    Daher war ich der Meinung, dass ich bei einem "Script-Testen" drücken, diese auch ausgeführt werden würde.
    Leider wird jedoch die gerade geöffnete .au3 gestartet.
    Diese findet dann natürlich die Ganzen Globalen Variabeln und Funktionen nicht und es hagelt Fehlermeldungen.
    Zufällig war ich dann in der main.au3 unterwegs und drückte darauf -> Funktioniert.

    Also funktioniert mein Aufbau nach dem auseinander rupfen eigentlich schon!

    Werde das mal als Bug der IDE eintragen.

    Euch ein schönes Wochenende!!!