AutoIt3Wrapper - StripOnly/StripFunc Error: Found Call() statement using unsolvable Func

  • Hallo zusammen,

    ich bräuchte mal wieder eure Hilfe und zwar bin ich auf das Thema "AutoIt3Wrapper" gestoßen.

    Leider bekomme ich ein paar "Errors/Warnings" und die compilierte *.exe funktioniert auch nicht mehr korrekt.

    Aber zuerst welche Parameter ich nutze:

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/so /pe /rm

    Folgenden Output erhalte ich beim Compilieren:

    Im ersten Schritt würde ich euch bitten mir die Fehlermeldung zu erklären.

    Was genau meinen die mit "Found Call() statement using unsolvable Func", bzw wieso sollte die Funktion "unsolvable" sein?


    Hier als Beispiel die Stelle aus der 2ten Fehlermeldung:


    Vielen Dank schon mal im Vorraus

    Viele Grüße

    borsTiHD

  • Schau Dir mal in der Ausgabedatei autologin_stripped.au3 (oder so ähnlich) an, ob die angemeckerten Funktionen enthalten sind. Falls nein, dann kannst Du die Funktionen mit der Direktive #Au3Stripper_Ignore_Funcs= func1 von der Bearbeitung durch Stripper ausnehmen.

  • Vielen Dank erstmal für die schnelle Antwort. :)

    In der Ausgabedatei "*_stripped.au3" sind alle Funktionen aus den Fehlermeldungen enthalten.

    Trotzdem habe ich das mit "#Au3Stripper_Ignore_Funcs= _AuThread_Startup" mal ausprobiert.

    Es sind dann leider immer noch 6 Errors mit dem Unterschied, das bei eine Fehlermeldung jetzt der Name der Funktion aus dem original geblieben ist: :(

    AutoIt
    -### StripOnly/StripFunc Error: Found Call() statement using unsolvable Func, which will/could lead to removal of Funcs that are used by this Function.
    >### current Func: _AuThread_Startup
    d:\stuff\programmieren\autoit\codes\autofan\includes\authread-master\authread_by_borstihd.au3(15,1): Warning for line:Call($CmdLine[2])

    Die anderen Fehlermeldungen sind weiterhin identisch.

  • Call($CmdLine[2]) ;<<<<<<< Diese Zeile wurde markiert !!!

    Dass diese Zeile markiert wurde liegt daran, dass zur Laufzeit von AU3Stripper der Name der aufzurufenden Funktion nicht bekannt ist. Dadurch kann Au3Stripper für Funktionen nicht sinnvoll eingesetzt werden.
    Setze in Deinem Skript:

    Code
    #Au3Stripper_Parameters=StripUnusedFunc=0

    damit Funktionen nicht entfernt werden.
    Generell stellt sich dann die Frage, ob Au3Stripper für dieses Skript sinnvoll eingesetzt werden kann.

  • Wenn es lediglich 6 Stellen sind, die dadurch nicht "optimiert/gekürzt" werden, würde ich es gerne trotzdem probieren.

    Habe meine Parameter jetzt wie folgt:

    AutoIt
    #Au3Stripper_Parameters=/so /pe /rm /StripUnusedFunc=0

    Dadurch bekomme ich jetzt noch mehr Fehler: :/

    (hab die Ausgabe etwas gekürzt)

  • Dann versuche es mal so...

    6 Mal editiert, zuletzt von Bitnugger (22. Juli 2018 um 22:22)

  • Juhuuu, falls mal jemand hier drüber stößt. Ich wollte meine Lösung noch kurz nennen.

    Ich hab es mittlerweile für mich gelöst und verstehe wohl auch erst jetzt wie Au3Stripper soweit funktioniert.

    Da alle Funktionen umbenannt/gekürzt werden, versuchte die "Call" letzendlich immer eine Funktion aufzurufen, deren Name ich vorher aus einer Variable als String nehme, aber in der Compilierten Version einen anderen Namen erhielt.
    Also im Prinzip genau wie es vorher bereits von Bitnugger und water geschrieben wurde.

    Nur konnte ich es nicht gänzlich nachvolziehen was jetzt genau falsch lief bei mir.

    Bei den stellen wo ich die Funktionen aufrufe nutze ich Forking.

    Ich starte zb. per Button mehrere Instanzen der gleichen Exe mit unterschiedlichen Parametern.

    In dem Parameter übergebe ich die zu startende Funktion als String aus der Haupt Exe.

    Damit ich dann in den SubThreads die Funktion starte, nutze ich Call mit dem der Exe übergebenen Paramter >> https://github.com/jesobreira/authread

    Meine Lösung ist die ganzen Funktionen die ich für diese Threads nutze in Au3Stripper zu ignorieren:

    Code
    #Au3Stripper_Ignore_Funcs=EndSZTools*, _EndSZTools*, EndSZbyLocation*, _EndSZbyLocation*, etc...

    Mir war vorher nur nie ganz klar welche Funktionen ich ignorieren sollte.

    Beim Ignorieren werden dank Wildcard sämtliche Funktionen mit dem beinhaltenden Namen ignoriert.

    Da dies nur ein sehr kleiner Teil meines Scripts ist, habe ich immer noch die ganzen Vorteile von Au3Stripper.

    Danke euch Beiden nochmal nachträglich für die Hilfe. :)