AU3 Code während der Laufzeit nachladen?

  • Hallo in die Runde,

    nachdem das mit dem verpacken von Maps in JSON so gut geklappt hat,stelle ich mir die Frage ob man auch selbst gebastelte AU3 Funktionen darin ablegen könnte?

    Was ja kein Problem darstellt, aber wie lasse ich z.B. die Zeichenkette wo eine Funktion definiert würde, zur Laufzeit interpretieren, so das diese aufgerufen werden könnte?

    Mit konstruktiven Grüßen

  • Nun nur mit Einschränkungen.
    Du kannst Code aus Strings oder Dateien ausführen lassen aber da gibt es ein paar Einschränkungen.

    Methode 1 - Execute():

    hierbei kann kurzer Code in Strings ausgeführt werden und deren Rückgabewert im Hauptskript weiterverwendet werden.
    Mehrzeilige Konstrukte wie Schleifen oder Funktionsdefinitionen gehen damit nicht.
    Auch Variablenzuweisungen klappen nicht.
    Variablen aus dem Hauptskript können zwar in diesen Ausdrücken verwendet, aber nicht überschrieben werden - nur der Return-Wert von Execute() könnte hierfür dienen.

    Methode 2 -  /AutoIt3ExecuteLine bzw. /AutoIt3ExecuteScript:

    Man kann den AutoIt-Interpreter aufrufen und entweder eine Codezeile oder ein ganzes Skript angeben, welches ausgeführt werden soll.
    Das geht auch mit der kompilierten Exe-Datei des Hauptskriptes, wenn es mit der richtigen Compileroption kompiliert wurde.
    Damit kann man auch umfangreichere Skripte ausführen, aber diese haben keine Verknüpfung zum Hauptskript - teilen sich also keine Variablen usw.
    Es wird einfach nur aufgerufen:

  • Das erste nutze ich schon im Kontext mit Assign() um via Maps->JSON->Maps dynamisch Variablen zuzuweisen, und das klappt wunderbar. Beim zweiten bin ich mit nicht ganz sicher, darum mein evtl. doofe Nachfrage, ob wenn man ein Skript mit AutoIt3ExecuteScript() aufruft, dessen Funktionen nach dem Aufruf im "Hauptprogramm" zur Verfügung stehen?