Mehrere Au3 zusammenführen

  • Hallo,

    diesesmal eine generelle Frage:
    Ich möchte gerne mehrere au3 Dateien in einer
    Anwendung.au3 unterbringen und handhaben. Später *.exe
    Einzeln läuft jede Anwendung prima.

    Wenn ich den Code jeder Anwendung.au3 in den Maincode.au3
    kopiere, verliert man total den Überblick und es kommen Errors...

    Wie geht man da am besten vor?
    Wenn ich Dateien mit #include <Liste.au3> z.B.
    innerhalb des Codes verwende, dann sind doch die einzelnen au3 Files ungeschützt.

    Oder macht man von jedem au3. eine Funktion?
    Kann man den kpl, Quellcode einer au3 Datei als Funktion innerhalb
    der Anwendung aufrufen
    ?
    Bin mit total unschlüssig welchen Weg ich gehen soll!

    Würde mich über Tipps sehr freuen.


    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (30. Juni 2011 um 20:18)

  • Also, wenn du die Skripte includest, dann werden sie beim compilieren einfach an die Stelle geschrieben, d.h man braucht die anderen au3s nicht mehr. Wenn du die einzelnen Skripte getrennt starten willst, geht das über run(), bzw. shellexecute().
    Aber wenn du includierst, solltest du bei den includierten Skripten einfach dein "Hauptcode", also der Teil, der bei Start des Scriptes ausgeführt wird, in eine Funktion packen, und von dem Hauptskript aufrufen..(Hoffe du hast verstanden was ich meine ;)

    MfG,
    Fresapore

  • Hallo Fresapore,

    merci für die Hilfe.
    Also, ich hatte folgendes mit einer au3 Datei probiert
    Ich habe sie einfach in eine Function eingeschlossen
    z.B. Liste.au3

    [autoit]


    Func _Liste() ; das habe ich in die erste Zeile geschrieben
    #include <ie.au3>
    ...; diese Datei läuft also ohne Function tadelos.
    Code....
    endfunc ; und am Ende der Zeile abgeschlossen!

    [/autoit]

    In meiner Main.au3 hatte ich diese Liste.au3(die nun eine Func ist)
    includiert. und im Code mit _Liste() versucht aufzurufen,
    das ging aber nicht! Mache ich da was falsch?


    Ich hatte in meiner Main.au3
    folgendes gemacht:

    [autoit]


    #include <Liste.au3>
    ;hier steht der Code der Main.au3
    ...
    _Liste() ; hier wollte ich die Function aufrufen

    [/autoit]

    DIe Liste.au3 ist im gleichen Verzeichnis wie die Main.au3!


    Liebe Grüße
    Ilse ;)

  • Zitat

    Du musst in der Liste.au3 das include noch vor den Anfang der Funktion schreiben, da dies ein Präprozessorbefehl ist!
    Außerdem musst du in der Liste.au3 auch noch #include-once einfügen, dann kannst du in der Main.au3 die Funktion _Liste() aufrufen


    Beides falsch... Man sollte #includes an den Anfang setzen, der Übersicht wegen. Der Code wird vor dem ausführen exakt an dieser Stelle eingefügt.
    #include-once sorgt dafür, dass ein Script nur einmal includet werden kann. Das hat nichts mit den Funktionen in dem Script zu tun.

  • Hallo stayawayknight,

    hm...habe ich gemacht,
    läuft aber immer noch nicht.

    Meine Liste.au3
    sieht jetzt so aus:

    Spoiler anzeigen
    [autoit]


    #include-once
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Func _Liste()

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

    ;...code
    endfunc

    [/autoit]

    meine Main.au3
    sieht so aus

    Spoiler anzeigen
    [autoit]


    #include <StructureConstants.au3>
    #include <Liste.au3>

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

    _Liste()

    [/autoit]

    Die Fehlermeldung ERROR: syntax error
    Func

    Grüße
    Ilse ;)

    EDIT:
    Gerade probiert:
    Ich habe den kpl. Code aus der Main.au3
    entfernt und nur
    #include <Liste.au3>
    _Liste() drinstehen.

    Die Fehlermeldungen kommen aus der Liste.au3 die alleine einwandfrei läuft!
    undefined function.End()
    undefined function.Save()

    Einmal editiert, zuletzt von Ilse (30. Juni 2011 um 19:18)

  • hast du deine Liste.au3 im Include-Verzeichnis von AutoIt?
    Ansonsten mußt du, soweit ich weiß den Pfad angeben.
    Wenn also die Main.au3 im gleichen Verzeichnis wie die Liste.au3 liegt dann so:

    [autoit]

    #include "Liste.au3"

    [/autoit]

    Korrigiert mich, falls ich falsch liege

    Edit: Grad nochmal die Hilfe gelesen... Wenn "" verwendet wird, bezieht sich die Pfadangabe relativ auf's Script-Verzeichnis
    Beispiel korrigiert, danke an name22

    UNPLEASANT SPOILER

    You just lost the game!

  • So, ich habe alles
    nochmals geprüft.

    Ich glaube es hängt an den weiteren Functions
    die in der Liste.au3 enthalten sind!

    ohne die Functions klappt es:
    Also:
    Main.au3

    [autoit]


    #include <Liste.au3>
    _Liste()

    [/autoit]

    Liste.au3

    [autoit]


    #include-once
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Func _Liste()
    MsgBox(0,"","Liste")

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

    EndFunc

    [/autoit]


    das geht, aber die Liste.au3
    besitzt Functions:

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

    #include-once
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Func _Liste()
    MsgBox(0,"","Liste")

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

    Func _Ende()
    exit
    endFunc
    ;und weitere Functions....

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

    EndFunc

    [/autoit]

    Kann das daran liegen?


    Grüße
    Ilse

  • Die Fehlermeldungen kommen aus der Liste.au3 die alleine einwandfrei läuft!
    undefined function.End()
    undefined function.Save()

    Naja dann solltest du halt mal schaun ob die beiden Funktionen in der liste.au3 sind. Ich vermute mal nicht, oder deine liste.au3 schaut nun so aus:

    [autoit]


    func _Liste()
    ;...
    func end()
    endfunc

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

    func save()
    endfunc
    ;...
    endfunc

    [/autoit]

    Was natürlich falsch wäre. So müsste deine liste.au3 ausschaun:

    [autoit]


    func _Liste()
    endfunc

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

    func end()
    endfunc

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

    func save()
    endfunc

    [/autoit]

    Aber wie schon erwähnt wurde... poste einfach beide Dateien unverändert, dann braucht hier auch niemand raten was da falsch läuft.

    EDIT: Na da hatte ich wohl richtig geraten... Funktionen dürfen nicht verschachtelt deklariert sein.

  • ja, das war's
    die Funktionen.

    Also das Script bis auf die Funktionen
    in eine Funktion einschliessen.
    Man berücksichtigt quasi die vorhandenen Funktionen in dem Script nicht!
    Also so:

    [autoit]


    #include <ie.au3>

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

    Func _Liste()
    ;Code der Liste
    ;If.....
    endfunc

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

    ;alles andere nicht berücksichtigen!
    ;Funktionen der Liste
    Func _End()
    exit
    endfunc

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

    Danke nochmal an alle

    Liebe Grüße
    Ilse ;)