1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. borsTiHD

Beiträge von borsTiHD

  • _FileListToArray

    • borsTiHD
    • 17. September 2018 um 16:08

    Ah verstanden.

    Habs zwischenzeitlich mal ausprobiert und bei mir am privaten PC, wo es auch so sehr schnell läuft, konnte ich einen Geschwindigkeitsschub erkennen.

    Bei den Rechnern die das Script eigentlich verwenden, sollte der Gewinn dann schon fast ernorm wirken. :D

    VIelen Dank. :)

    €dit: Sorry fürs Thread kapern...

  • _FileListToArray

    • borsTiHD
    • 17. September 2018 um 15:48

    Oh, das ist auch egt eine super Sache. ^^

    Werde ich so probieren, vielen Dank. :):thumbup:

    Damit ich es richtig nachvollziehe.

    Sobald ich das erste Element erhalte, das bei einem Durchgang leer ist, setze ich "ContinueLoop 2" damit er erst garnicht die restlichen Elemente durchgeht, sondern direkt dieses "Module" des Arrays überspringt?

  • _FileListToArray

    • borsTiHD
    • 17. September 2018 um 15:39

    Hm... Oscar kann ich Dictionarys auch für GUIControls einsetzen?

    Folgende Ausgangssituation habe ich.

    Ich baue eine GUI mit mehreren eigenständigen "Modulen" (so nenne ich die mal).

    Diese Module besitzen mehrere unterschiedliche Anzahlen an GUI Elementen, die ich alle in jeweils ein Array Speicher.

    Das Ziel ist es, das meine GUI per Hotkey angesprochen wird.

    Jedes mal wenn der Hotkey gedrückt wurde, wird anhand bestimmter Kritierien geprüft welche Module angezeigt werden sollen und welche nicht.

    Sprich, es können immer unterschiedliche Module angezeigt werden.

    Code
    Global $GUI_Line[$iModule][3]          ;Trennlinien
    Global $GUI_Text[$iModule][27]         ;Texte
    Global $GUI_Input[$iModule][2]         ;Inputfelder
    Global $GUI_Edit[$iModule][1]          ;Edit Felder
    Global $GUI_Combo[$iModule][3]         ;Combo
    Global $GUI_Button[$iModule][19]       ;Buttons

    So Initialisiere ich meine Arrays.

    "$iModule" steht hierbei für die Modulnummer (1,2,3,...), bzw. wegen der Initialisierung für die Anzahl an Modulen die ich habe.

    Der weitere Key vom 2DArray steht für die Anzahl an Elementen, leider gebe ich die Array Größe dadurch noch händisch an.

    Jetzt gehe ich so vor.

    Bei einem Druck auf den Hotkey, gehe ich in Schleifen alle Arrays komplett durch und "verstecke" jedes Element.

    Anschließend wird geprüft welche Module angezeigt werden sollen und ich setze neue sichtbare GUI Koordinaten für jedes Element das erscheinen soll.

    Bei dieser Vorgehensweise habe ich mir viel Arbeit beim "Verstecken" der Elemente gespart.

    Beim Anzeigen der Elemente bisher nicht, da ich es trotzdem händisch mache.

    Mein Problem derzeit ist, nicht JEDES Modul besitzt die maximale Anzahl an Elementen (zb. Buttons 19 Stück).

    Trotzdem geht beim "Verstecken" meine Funktion in der Schleife alle, auch ungenutzten 2D Array Elemente durch.

    Mittlerweile merke ich, dass ich hier Einsparungspotentiale habe und merke wie sich die GUI immer langsamer aufbaut, je mehr dazu kommt (logischerweise).

    Kann ich um diese Prozesse zu beschleunigen auch Dictionarys irgendwie einsetzen?

    Hier meine "Hide" Funktion:

    Code
    Func GUIHideAll()
    
        _ConsoleLog("GUIHideAll() - gestartet - Verstecke alle GUI Elemente." & @CRLF)
    
        ;Geht alle Texte durch
        For $row = 0 To UBound($GUI_Text, 1) - 1
            For $column = 0 To UBound($GUI_Text, 2) - 1
                ;_ConsoleLog("Hide ControlID $GUI_Text[" & $row & "][" & $column & "]: '" & $GUI_Text[$row][$column] & "'" & @CRLF)
                _GUI_Hide($GUI_Text[$row][$column])
            Next
        Next
    
        ;Geht alle Linien durch
        For $row = 0 To UBound($GUI_Line, 1) - 1
            For $column = 0 To UBound($GUI_Line, 2) - 1
                ;_ConsoleLog("Hide ControlID $GUI_Line[" & $row & "][" & $column & "]: '" & $GUI_Line[$row][$column] & "'" & @CRLF)
                _GUI_Hide($GUI_Line[$row][$column])
            Next
        Next
    
        ;Geht alle Buttons durch
        For $row = 0 To UBound($GUI_Button, 1) - 1
            For $column = 0 To UBound($GUI_Button, 2) - 1
                ;_ConsoleLog("Hide ControlID $GUI_Button[" & $row & "][" & $column & "]: '" & $GUI_Button[$row][$column] & "'" & @CRLF)
                _GUI_Hide($GUI_Button[$row][$column], True)
            Next
        Next
    
        ;Geht alle ComboList durch
        For $row = 0 To UBound($GUI_Combo, 1) - 1
            For $column = 0 To UBound($GUI_Combo, 2) - 1
                ;_ConsoleLog("Hide ControlID $GUI_Combo[" & $row & "][" & $column & "]: '" & $GUI_Combo[$row][$column] & "'" & @CRLF)
                _GUI_Hide($GUI_Combo[$row][$column], True)
            Next
        Next
    
        ;Geht alle Inputfelder durch
        For $row = 0 To UBound($GUI_Input, 1) - 1
            For $column = 0 To UBound($GUI_Input, 2) - 1
                ; _ConsoleLog("Hide ControlID $GUI_Input[" & $row & "][" & $column & "]: '" & $GUI_Input[$row][$column] & "'" & @CRLF)
                _GUI_Hide($GUI_Input[$row][$column], True)
            Next
        Next
    
        ;Geht alle Edit Felder durch
        For $row = 0 To UBound($GUI_Edit, 1) - 1
            For $column = 0 To UBound($GUI_Edit, 2) - 1
                ; _ConsoleLog("Hide ControlID $GUI_Edit[" & $row & "][" & $column & "]: '" & $GUI_Edit[$row][$column] & "'" & @CRLF)
                _GUI_Hide($GUI_Edit[$row][$column], True)
            Next
        Next
    
        ;Einzelne Elemente
        _GUI_Hide($KeepOnTopCheckbox, True)
        _GUI_Hide($KeepInPositionCheckbox, True)
        _GUI_Hide($DebugButton, True)
        _GUI_Hide($UpdateButton, True)
    
        _ConsoleLog("GUIHideAll() - beendet - Alle GUI Elemente wurden versteckt." & @CRLF)
    EndFunc   ;==>GUIHideAll
    Alles anzeigen
  • IniReadSection mit mehreren AutoIT Instanzen auf die selbe Datei?

    • borsTiHD
    • 17. September 2018 um 15:00

    Hm... Workaround für mich.

    Ich gehe nach oben genannter Lösung 1.

    Ich kopiere beim erstmaligen Start die Exe in einen Temp Ordner von Windows.

    Für die Threads starte ich dann die lokal existierende Exe aus dem Temp Ordner.

    Das geht jetzt, seitdem der Fehler mit "@Scriptname" behoben wurde.

    Ich denke mal das sollte auch wesentlich schneller sein, als die Exe jedesmal vom Netzwerklaufwerk zu starten.

    Somit hab ich mein erstes Problem dank dir trotzdem lösen können. :3

    Vielen Dank nochmals für alles.

    Ich finde es zwar immer noch Schade, dass ich die *.a3x Variante derzeit nicht nutzen kann, weil die wäre doch bestimmt nochmal schneller.

    Allerdings bekam ich hierbei auch den Gedanken das ja auch letzendlich die eigene Exe als Iinterpreter für die *.a3x Datei dient.

    Was wiederum bedeuten würde, auch hierbei würde ich die Exe vom Netzwerklaufwerk mehrmals starten... wäre dann wieder genauso langsam nehme ich an.

  • IniReadSection mit mehreren AutoIT Instanzen auf die selbe Datei?

    • borsTiHD
    • 17. September 2018 um 14:01

    Zur vollständigkeit hier noch die Pfade, wenn ich die Compilierte Exe benutze, aber mit dem alten "Run()" verfahren, sodass sich die Exe selbst für einen Thread startet:

    Code
    Compiled - mit eigener EXE:
    _AuThread_StartThread() - Starte neuen SubThread: D:\AutoFan\Compiled\AutoFan_v2.24_test.exe --au-thread "AufzurufendeThreadFunction"
    _AuThread_StartThread() - @WorkingDir: D:\AutoFan\Compiled

    Das beenden des Scripts kann ich derzeit nicht nachvollziehen.

    Wenn ich den SubThread starte, werden normalerweise direkt zu Beginn bereits Log Meldungen ausgegeben, bzw in eine Datei geschrieben, noch bevor der SubThread erkennt das es sich um einen SubThread etc. handelt.

    Mir kommt es eher so vor, als könnte die Compilierte Exe die *.a3x nicht starten.

    Run() gibt aber trotzdem eine PID zurück.

    Im Netz hatte ich als ich darüber gestolpert bin, gelesen man sollte auch im Hauptscript folgendes reinschreiben.

    Ist bei mir auch enthalten.

    Code
    #pragma("AutoItExecuteAllowed", True)

    Darum denke ich eher mein "Run()" ist falsch...



    -----------------

    €dit:

    Zum weiteren Eingrenzen habe ich in die erste Zeile der *.a3x Datei eine MsgBox eingefügt.

    Code
    MsgBox(4096, "", "SubThread is running")

    Starte ich aus Scite herraus mein Script und starte einen SubThread, wird die MsgBox angzeigt.

    Starte ich die compilierte Exe und dort einen SubThread, erscheint die MsgBox nicht.

    Desweiteren habe ich mich mit weiteren Consolen Ausgaben versichert, in welchen If-Zweig der MainThread springt, wenn er einen der oben genannten "Run()" Befehle ausführt.

    Die werden auch korrekt geroutet... es bleibt nachwievor bei diesem, der denke nicht klappt:

    Code
    $iPID = Run('"' & @ScriptFullPath & '" /AutoIt3ExecuteScript "' & $sAutoFanMultiThreadFile & '" "--au-thread" "' & $sCallback & '"', $sAutoFanRootPath)

    Weiterhin merkwürdig finde ich, dass ich eine PID zurückerhalte, aber nichtmal meine MsgBox aus der ersten Codezeile angezeigt wird.

    Zum weiteren Testen, prüfe ich auch nach dem Run() mit ProcessExists():

    Code
    If ProcessExists($iPID) Then
        _ConsoleLog("_AuThread_StartThread() - Process existiert - ProcessExists(): " & ProcessExists($iPID) & @CRLF)
    Else
        _ConsoleLog("_AuThread_StartThread() - Process existiert NICHT - ProcessExists(): " & ProcessExists($iPID) & @CRLF)
    EndIf

    Und auch hier wird mir bestätigt dass der SubThread erstellt wurd?!?!?!

  • IniReadSection mit mehreren AutoIT Instanzen auf die selbe Datei?

    • borsTiHD
    • 17. September 2018 um 13:40

    Ist @WorkingDirectory was anderes als @WorkingDir?

    Ich habe nachträglich bei Run() zusätzlich als WorkingDir "@WorkingDir" als Parameter hinzugefügt (für BEIDE If-Zweige).

    Hat nichts geändert...

    Aber hier die Pfade:

    Code
    Not Compiled:
    _AuThread_StartThread() - Starte neuen SubThread: "D:\Stuff\Programmieren\AutoIT\AutoIt-v3.3.14.5\autoit3_x64.exe" /AutoIt3ExecuteScript "D:\AutoFan\AutoFan\AutoFan_v2_Threads.a3x" "--au-thread" "AufzurufendeThreadFunction"
    _AuThread_StartThread() - @WorkingDir: D:\AutoFan
    
    Compiled:
    _AuThread_StartThread() - Starte neuen SubThread: "D:\AutoFan\Compiled\AutoFan_v2.24_test.exe" /AutoIt3ExecuteScript "D:\AutoFan\Compiled\AutoFan\AutoFan_v2_Threads.a3x" "--au-thread" "AufzurufendeThreadFunction"
    _AuThread_StartThread() - @WorkingDir: D:\AutoFan\Compiled

    Achso, vergessen... ja, die "*.a3x" existiert in beiden Verzeichnissen.

  • IniReadSection mit mehreren AutoIT Instanzen auf die selbe Datei?

    • borsTiHD
    • 17. September 2018 um 13:17

    Exits gibts.

    Die befinden sich allerdings nur "außerhalb" der oben genannten Schleife, oder in dem inneren der If-Abfrage, sobald eine Nachricht erkannt wurde, also "_AuThread_GetMessage() <> False" wird.

    Sollte das eintreten, sollten weitere Log Meldungen erscheinen, oder wegen einer unerwarteten Rückmeldung das Script abstürzen.

    Naja, ich belasse es mal dabei.

    Ich hätte eine weitere Frage.

    Ich vermute ich hab noch weitere Fehler drin, wo ich dich um Rat bitten würde.

    Das ganze scheint jetzt zu funktionieren, wenn ich aus dem Scite Editor herraus alles starte.

    Compiliert scheinen die Threads nicht korrekt zu starten.

    Obwohl ich eine PID erhalte, wird leider nichts in die Log Datei von den SubThreads geschrieben, weshalb ich davon ausgehe dass ich beim Run() was falsch mache.

    Code
    Ursprüngliches Threadding (ruft die eigene Exe erneut auf - hier funktionieren Beide Varianten):
    If @Compiled Then
        $iPID = Run(@ScriptFullPath & " --au-thread """ & $sCallback & """")
    Else
        $iPID = Run(@AutoItExe & ' "' & @ScriptFullPath & '" --au-thread "' & $sCallback & '"')
    EndIf
    
    
    Neues Threadding mit *.a3x (hier funktioniert derzeit nur das untere aus dem Else Zweig):
    $sAutoFanMultiThreadFile = "\Unterordner\SubThread.a3x"
    If @Compiled Then
        $iPID = Run('"' & @ScriptFullPath & '" /AutoIt3ExecuteScript "' & $sAutoFanMultiThreadFile & '" "--au-thread" "' & $sCallback & '"')
    Else
        $iPID = Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sAutoFanMultiThreadFile & '" "--au-thread" "' & $sCallback & '"')
    EndIf
    Alles anzeigen
  • IniReadSection mit mehreren AutoIT Instanzen auf die selbe Datei?

    • borsTiHD
    • 17. September 2018 um 12:40

    Juhuu, erstmal vielen Dank für die schnelle Antwort. :)

    Zum Entwirren am Besten meine genutzte Verzeichnisstruktur:

    Code
    ;Das ist die Ini die von Main- und SubThread gelesen wird:
    Global Const $__AuThread_sTmpFile = @TempDir & "\" & @ScriptName & "_thread.tmp"
    
    Meine AutoIT Exe befindet sich in einem gewissen Unterordner, den ich hier einfach mal als "\" (Root) ansehe.
    
    \MyAutoIT.exe
    \Unterordner\SubThread.a3x


    Oh... als ich das geschrieben habe ist mir aufgefallen dasd meine SubThread.a3x wegen dem Zusatz @Scriptname versucht auf eine andere Datei zuzugreifen... :rofl:

    Fehler berichtigt... ich habe jetzt einen festen Namen vergeben und es löst mein Problem. :rolleyes:;(

    Ich muss das noch genauer testen, aber ich danke dir schon mal vielmals. :*

    Aber kannst du mir vlt noch eine Sache erklären?

    Das ist eine sehr kleiner Ausschnitt aus der Endlosschleife eines SubThreads:

    Code
    ;Schleife des Threads
        While 1
    
            ;Prüft in der Schleife immer wieder ob eine Nachricht angekommen ist
            _ConsoleLog("_EndSZbyLocation_Ping_Thread() - Prüfe Nachrichten." & @CRLF)
            $sMainThreadMsg = _AuThread_GetMessage()
            _ConsoleLog("_EndSZbyLocation_Ping_Thread() - Nachricht von MainThread: " & $sMainThreadMsg & @CRLF)
    
            ;Wenn eine Nachricht übergeben wurde
            If $sMainThreadMsg <> False Then
    
                [...]
    
                ;Beendet den Thread
                Exit
            EndIf
    
            _ConsoleLog("_EndSZbyLocation_Ping_Thread() - Sleep" & @CRLF)
            Sleep(100)
        WEnd
    Alles anzeigen

    Kannst du mir erklären, wieso sich vorher die Threads von selbst beendeten in 1-2 Sekunden?

    Ohne vorhandene Fehlermeldungen?

    Sie haben jedenfalls immer wieder versucht eine nicht existierende Datei zu lesen.

  • IniReadSection mit mehreren AutoIT Instanzen auf die selbe Datei?

    • borsTiHD
    • 17. September 2018 um 12:07

    Hallo zusammen,

    ich hoffe ihr könnt mir ein weiteres Mal helfen, ich komme einfach nicht weiter, aber konnte mein Problem soweit eingrenzen.

    Das Ganze ist leider nicht so einfach erklärt und für Code Beispiele ist alles etwas zu umfangreich geworden, aber ich versuche mein bestes! :/

    Mein AutoIT Script ist mittlerweile recht umfangreich geworden und ich nutze jetzt schon seit sehr langen Forking mithilfe von AuThread (https://github.com/jesobreira/authread - mittlerweile aber fast komplett umgeschrieben und erweitert).

    Das nutze ich um zb. per Button parallel mehrere API/JSON Abfragen auszuführen und auszuwerten, ohne jeweils auf mein Hauptprogramm warten zu müssen.

    Funktioniert auch sehr schön und habe mittlerweile teilweise 5-8 parallele Instanzen am laufen.

    Leider zieht das ganz schön an der Performance und es kamen immer mehr und mehr hinzu.

    Mein AutoIT Script wird von einem Netzwerklaufwerk ausgeführt, was letztendlich dazu führt das jedes Mal, wenn parallele Abfragen gestartet werden, die Exe sich selbst von dem Netzwerklaufwerk mehrmals startet.

    Jetzt bin ich an einem Punkt angelangt wo es dadurch zu langsam läuft und wollte was dagegen tun.

    Zitat

    Lösung 1:

    Ich kopiere das Programm beim ersten Aufruf selbst in den lokalen Temp Ordner von Windows und starte die Threads darüber.

    --- leider ging das nie... ich hatte es geschafft die Exe zu kopieren und auch aufzurufen (mir wurde von der Run() Funktion eine PID übergeben), aber kurz darauf beendeten sich die Exe'n von selbst wieder

    Lösung 2:

    Wegen Zugriffsrechten etc. dachte ich, man könnte das Script nicht aus dem Tmp Ordner starten, daher habe ich eine verkleinerte Exe, die nur die für das Threadding enthaltene Funktionen beinhaltet erstellt und versucht die aus dem gleichen Verzeichnis, wie die Haupt-Exe zu starten.

    --- auch hier wieder das gleiche Problem aus Lösung 1. Die Exe'n starten, ich bekomme die PID und beenden sich wieder

    Lösung 3:

    Mittlerweile habe ich erfahren das man die *.au3 auch direkt aus seiner compilierten AutoIT Exe starten kann... derzeit compiliere ich eine verkleinerte Version als *.a3x und starte diese (anstatt einer 2mb großen Exe, starte ich jetzt eine 80kb große *.a3x pro Thread) :party:

    --- ABER AUCH HIER... es startet, ich bekomme die PID und es beendet sich...

    Alles anzeigen


    Ihr müsst wissen, die obigen Lösungen habe ich in einem größeren Zeitraum versucht und bin nie dahinter gekommen was egt genau falsch läuft.

    Mittlerweile habe ich ein besseres Logging für meine Anwendung... wo ich vorher nur die Consolen Ausgabe des MainThreads per Scite erhalten konnte, schreiben meine SubThreads ihre Logs in eine temporäre Log Datei.

    Darüber konnte ich weiter eingrenzen was egt beim Threadding passiert, oder eher nicht passiert.

    Die Kommunikation der einzelnen Threads geschieht wie im Original über "eine" Ini Datei.

    Funktioniert bisher super und gab keine Probleme, wenn "mehrere" Instanzen der gleichen Exe auf diese Zugreifen wollen.

    Wenn ich jetzt aber ein SubThread versucht auf diese Ini zuzugreifen, welche zb. meine *.a3x (oder wahrscheinlich auch aus Lösung 1 und 2 probierten >Exe'n), wird die Ini nie gelesen und nach 1-2 Sekunden beendet sich das Script von selbst (ohne Fehler, oder dergleichen).

    Hier ein Ausschnitt aus dem Teil, wo die Nachrichten gelesen werden - diese werden im SubThread in einer Endlosschleife ständig abgefragt bis eine Antwort kommt:

    AutoIt
    Func _AuThread_GetMessage()
        ;Es wird nach Nachrichten gesucht
        _ConsoleLog("_AuThread_GetMessage() - Lese Nachrichten..." & @CRLF)
        Local $aArray = IniReadSection($__AuThread_sTmpFile, "msg")
    
        ;Prüft ob es einen Fehler gab
        If Not @error Then
            _ConsoleLog("_AuThread_GetMessage() - Nachrichten erhalten... versuche auszuwerten." & @CRLF)
            _ConsoleArray($aArray)
    
            ;Geht alle Keys, bzw alle Nachrichten durch    >> Key: $aArray[$i][0] (enthält PIDs) - Value: $aArray[$i][1] (enthält die Nachricht)
            For $i = 1 To $aArray[0][0]
    
                ;Splittet den Key, $aKeySplit[1] ("Empfänger-PID|Sender-PID") beinhaltet die PID des Empfängers und $aKeySplit[2] beinhaltet die PID des Senders
                $aKeySplit = StringSplit($aArray[$i][0], "|")
    
                ;Prüft nur weiter, wenn der Key über zwei PIDs verfügt (bzw das Array mehr wie einen Eintrag enthält) und somit eine Emfpangs- und Sende-PID existiert
                If $aKeySplit[0] > 1 Then
    
                    ;Prüft ob die linke PID der Nachricht überhaupt die eigene PID des Prozesses ist, weil sonst, ist die an einen anderen Thread gedacht
                    If $aKeySplit[1] = @AutoItPID Then
    
                        ;Liest Nachricht
                        Local $sMsg = IniRead($__AuThread_sTmpFile, "msg", $aArray[$i][0], False)
                        If $sMsg = False Then Return False
    
                        $sMsg = $aKeySplit[2]&"|"&$sMsg                                ;Fügt an die Nachricht die Sender-PID zur späteren Zuordnung
                        IniDelete($__AuThread_sTmpFile, "msg", $aArray[$i][0])        ;Löscht die Nachricht
                        Return $sMsg                                                ;Gibt die Nachricht zurück
    
                    EndIf
                EndIf
            Next
        Else
            _ConsoleLog("_AuThread_GetMessage() - Konnte keine Nachrichten lesen - ERROR: " & @error & @CRLF)
        EndIf
        ;War nichts erfolgreich, gibts ein False
        Return False
    EndFunc
    Alles anzeigen

    "_ConsoleLog()" schreibt die typische Consolen Ausgabe und loggt diese in einer temporären Datei.

    Zum weiteren Eingrenzen hatte ich an mehreren Stellen die Ausgaben geloggt und zu prüfen an welche Stelle meine Subthreads kommen und an welche nicht.

    Die Zeile "Local $aArray = IniReadSection($__AuThread_sTmpFile, "msg")" erzeugt bei den SubThreads immer ein @ERROR Flag.

    Daraus schließe ich, dass die SubThreads keinen Zugriff auf die Ini Datei erhalten.

    Hier mein Log eines SubThreads:

    Code
    2018-09-17 11:58:57 : 14708 - _AuThread_Startup() - gestartet... prüfe, ob es sich um ein Main-, oder SubThread handelt.
    2018-09-17 11:58:57 : 14708 - _AuThread_Startup() - Alle Parameter: /AutoIt3ExecuteScript "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan\AutoFan_v2_Threads.a3x" "--au-thread" "_EndSZbyLocation_Ping_Thread"
    2018-09-17 11:58:57 : 14708 - _AuThread_Startup() - Es handelt sich um ein SubThread.
    2018-09-17 11:58:57 : 14708 - _AuThread_Startup() - Starte Funktion: _EndSZbyLocation_Ping_Thread
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - gestartet
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Prüfe Nachrichten.
    2018-09-17 11:58:57 : 14708 - _AuThread_GetMessage() - Lese Nachrichten...
    2018-09-17 11:58:57 : 14708 - _AuThread_GetMessage() - Konnte keine Nachrichten lesen - ERROR: 1
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Nachricht von MainThread: False
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Sleep
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Prüfe Nachrichten.
    2018-09-17 11:58:57 : 14708 - _AuThread_GetMessage() - Lese Nachrichten...
    2018-09-17 11:58:57 : 14708 - _AuThread_GetMessage() - Konnte keine Nachrichten lesen - ERROR: 1
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Nachricht von MainThread: False
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Sleep
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Prüfe Nachrichten.
    2018-09-17 11:58:57 : 14708 - _AuThread_GetMessage() - Lese Nachrichten...
    2018-09-17 11:58:57 : 14708 - _AuThread_GetMessage() - Konnte keine Nachrichten lesen - ERROR: 1
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Nachricht von MainThread: False
    2018-09-17 11:58:57 : 14708 - _EndSZbyLocation_Ping_Thread() - Sleep
    Alles anzeigen

    Wie ihr seht, startet die Endlosschleife immer wieder die "_AuThread_GetMessage()", welche versucht die Ini zu lesen, aber nicht schafft.

    Nochmal zur Verdeutlichung... wenn ich das Threadding mit mehreren Instanzen der "selben" Exe starte, können alle parallel auf diese Ini zugreifen.

    Im Regelfall wird die Schleife hier auch nur "einmal" aufgerufen zum Abfragen der Nachrichten.

    Ich hoffe ihr konntet mir soweit folgen. :saint:

    Meine eigentliche Frage... könnt ihr mir sagen was genau falsch läuft? :|

    Können die SubThreads, die quasi anderen Exen, oder eine *.a3x Datei ist nicht drauf zugreifen, weil die MainThread Exe diese blockiert?

    Wieso können dann SubThreads, die aus der gleichen Exe entstanden sind darauf zugreifen? :/

    Habt ihr eine Idee wie ich dieses Problem lösen, oder umgehen könnte?


    Vielen Dank schon mal fürs durchlesen und für die Hilfe. ;)

    Grüße

    borsTiHD

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

    • borsTiHD
    • 17. September 2018 um 11:20

    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. :)

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

    • borsTiHD
    • 22. Juli 2018 um 23:01

    Die Funktionen quasi vorher schon deklarieren?

    Ich werde es die Tage mal ausprobieren.

    Danke dir. :)

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

    • borsTiHD
    • 22. Juli 2018 um 20:02

    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)

    AutoIt
    >Running Au3Stripper (17.224.935.0)  from:D:\Stuff\Programmieren\AutoIT\AutoIt-v3.3.14.5\SciTE4AutoIt3_Portable-24-2-2017\Au3Stripper cmdline:
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    d:\stuff\programmieren\autoit\codes\autofan\includes\oneventfunc\oneventfunc.au3(201,1): Warning for line:$CtrlLib[$item][0][$n + 2] = Eval("ParType" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    d:\stuff\programmieren\autoit\codes\autofan\includes\oneventfunc\oneventfunc.au3(203,1): Warning for line:$CtrlLib[$item][1][$n + 2] = Eval("Par" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    d:\stuff\programmieren\autoit\codes\autofan\includes\oneventfunc\oneventfunc.au3(205,1): Warning for line:$aval = Eval("Par" & $n) 
    
    -#############################################################################################
    -#### Au3Stripper Found   3 Error(s)!!!!    This means your script could have problems running properly.  ####
    -#############################################################################################
    - 22.59 Iteration 1 Strip Variables result: Output  27739 lines and stripped 4836 lines
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBs3FBB.tmp(23678,1): Warning for line:$CtrlLib[$item][0][$n + 2] = Eval("ParType" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBs3FBB.tmp(23680,1): Warning for line:$CtrlLib[$item][1][$n + 2] = Eval("Par" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBs3FBB.tmp(23682,1): Warning for line:$aval = Eval("Par" & $n) 
    
    -#############################################################################################
    -#### Au3Stripper Found   3 Error(s)!!!!    This means your script could have problems running properly.  ####
    -#############################################################################################
    - 38.94 Iteration 2 Strip Variables result: Output  27577 lines and stripped 162 lines
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBs7F95.tmp(23516,1): Warning for line:$CtrlLib[$item][0][$n + 2] = Eval("ParType" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBs7F95.tmp(23518,1): Warning for line:$CtrlLib[$item][1][$n + 2] = Eval("Par" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBs7F95.tmp(23520,1): Warning for line:$aval = Eval("Par" & $n) 
    
    -#############################################################################################
    -#### Au3Stripper Found   3 Error(s)!!!!    This means your script could have problems running properly.  ####
    -#############################################################################################
    - 54.92 Iteration 3 Strip Variables result: Output  27196 lines and stripped 381 lines
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBsBE09.tmp(23135,1): Warning for line:$CtrlLib[$item][0][$n + 2] = Eval("ParType" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBsBE09.tmp(23137,1): Warning for line:$CtrlLib[$item][1][$n + 2] = Eval("Par" & $n) 
    
    -### StripOnly/StripFunc Error: Found Eval() statement using unsolvable variable, which will/could lead to removal of Global Const definition for this variable.
    >### current Func: _1bq
    C:\Users\borsTiHD\AppData\Local\Temp\OBsBE09.tmp(23139,1): Warning for line:$aval = Eval("Par" & $n) 
    
    -#############################################################################################
    -#### Au3Stripper Found   3 Error(s)!!!!    This means your script could have problems running properly.  ####
    -#############################################################################################
    - 70.73 Iteration 4 Strip Variables result: Output  27196 lines and stripped 0 lines
    - 78.47 Iteration 5 Strip and Rename Variables result: Output  27196 lines and stripped 0 lines
    +> Source    55443 lines 2500582 Characters.
    +> Stripped  5379 Func/Var lines and  22142 comment lines, Total 1587377 Characters.
    +> Saved     49% lines 63% Characters.
    +> 0 Au3Stripper v17.224.935.0 finished created:D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3
    +>19:57:40 Au3Stripper ended.rc:0
    >Running AU3Check (3.3.14.5)  from:D:\Stuff\Programmieren\AutoIT\AutoIt-v3.3.14.5  input:D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(2,24) : error: AutoFan(): undefined function.
    HotKeySet($0, "AutoFan")
    ~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(4534,61) : error: __Array_GreaterThan(): undefined function.
    Local $7d = _co($fq, $kd, $3l, $3m, $ij, __Array_GreaterThan)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(4551,58) : error: __Array_LessThan(): undefined function.
    Local $7d = _co($fq, $kd, $3l, $3m, $ij, __Array_LessThan)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(5344,51) : error: __ArrayUnique_AutoErrFunc(): undefined function.
    ObjEvent("AutoIt.Error", __ArrayUnique_AutoErrFunc)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(22646,37) : error: __AuThread_Checkloop(): undefined function.
    AdlibRegister("__AuThread_Checkloop")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(22650,41) : error: __AuThread_OnExit(): undefined function.
    OnAutoItExitRegister("__AuThread_OnExit")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23098,31) : error: HK_EventFunc(): undefined function.
    HotKeySet($164, "HK_EventFunc")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23113,35) : error: EventGuiFunc(): undefined function.
    GUISetOnEvent($164, "EventGuiFunc")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23117,40) : error: EventCtrlFunc(): undefined function.
    GUICtrlSetOnEvent($164, "EventCtrlFunc")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23121,45) : error: TrayEventCtrlFunc(): undefined function.
    TrayItemsetonevent($164, "TrayEventCtrlFunc")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23888,44) : error: AutoFanGUI_Button_CLOSE(): undefined function.
    GUISetOnEvent(-3, "AutoFanGUI_Button_CLOSE")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23890,37) : error: _WM_COMMAND(): undefined function.
    GUIRegisterMsg(0x0111, "_WM_COMMAND")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23902,70) : error: AutoFanGUI_InfoPage_Button_Confirm(): undefined function.
    GUICtrlSetOnEvent($1zu[$1zl][0], "AutoFanGUI_InfoPage_Button_Confirm")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23903,73) : error: AutoFanGUI_InfoPage_Button_SkinChange(): undefined function.
    GUICtrlSetOnEvent($1zu[$1zl][1], "AutoFanGUI_InfoPage_Button_SkinChange")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23920,55) : error: AutoFanGUI_KeepOnTopCheckbox(): undefined function.
    GUICtrlSetOnEvent($1zx, "AutoFanGUI_KeepOnTopCheckbox")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23921,60) : error: AutoFanGUI_KeepInPositionCheckbox(): undefined function.
    GUICtrlSetOnEvent($1zy, "AutoFanGUI_KeepInPositionCheckbox")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23922,53) : error: AutoFanGUI_LoggingCheckbox(): undefined function.
    GUICtrlSetOnEvent($1zz, "AutoFanGUI_LoggingCheckbox")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23923,50) : error: AutoFanGUI_Button_Debug(): undefined function.
    GUICtrlSetOnEvent($200, "AutoFanGUI_Button_Debug")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(23924,35) : error: _Restart(): undefined function.
    GUICtrlSetOnEvent($201, "_Restart")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25747,46) : error: TrayAutoPauseStart(): undefined function.
    TrayItemSetOnEvent($1z1, "TrayAutoPauseStart")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25751,50) : error: TrayAutoFanDefaultSkin(): undefined function.
    TrayItemSetOnEvent($240, "TrayAutoFanDefaultSkin")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25753,48) : error: TrayAutoFanLightSkin(): undefined function.
    TrayItemSetOnEvent($241, "TrayAutoFanLightSkin")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25756,50) : error: TrayAutoFanTransparenz(): undefined function.
    TrayItemSetOnEvent($242, "TrayAutoFanTransparenz")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25759,60) : error: TrayAutoPauseUserDataSchichtplan(): undefined function.
    TrayItemSetOnEvent($1z4, "TrayAutoPauseUserDataSchichtplan")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25762,37) : error: TrayAbout(): undefined function.
    TrayItemSetOnEvent($1z6, "TrayAbout")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25764,38) : error: TrayReadme(): undefined function.
    TrayItemSetOnEvent($1z7, "TrayReadme")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(25769,38) : error: ExitScript(): undefined function.
    TrayItemSetOnEvent($1z8, "ExitScript")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(26598,39) : error: AutoPauseGUI_CLOSE(): undefined function.
    GUISetOnEvent(-3, "AutoPauseGUI_CLOSE")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3"(26599,54) : error: AutoPauseGUI_PauseEintragen(): undefined function.
    GUICtrlSetOnEvent($1yx, "AutoPauseGUI_PauseEintragen")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    D:\Stuff\Programmieren\AutoIT\Codes\AutoFan\AutoFan_v2_stripped.au3 - 49 error(s), 0 warning(s)
    !>19:57:40 AU3Check ended. Press F4 to jump to next error.rc:2
    +>19:57:41 AutoIt3Wrapper Finished.
    >Exit code: 2    Time: 79.98
    Alles anzeigen
  • AutoIt3Wrapper - StripOnly/StripFunc Error: Found Call() statement using unsolvable Func

    • borsTiHD
    • 22. Juli 2018 um 19:29

    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.

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

    • borsTiHD
    • 22. Juli 2018 um 18:28

    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:

    AutoIt
    >Running Au3Stripper (17.224.935.0)  from:D:\Stuff\Programmieren\AutoIT\AutoIt-v3.3.14.5\SciTE4AutoIt3_Portable-24-2-2017\Au3Stripper cmdline:
    -### StripOnly/StripFunc Error: Found ObjEvent() statement using unsolvable Func, which will/could lead to removal of Funcs that are used by this Function.
    >### current Func: _1ah
    d:\stuff\programmieren\autoit\autoit-v3.3.14.5\include\ie.au3(2572,1): Warning for line:$__g_oIEErrorHandler = ObjEvent("AutoIt.Error", $__g_sIEUserErrorHandler) 
    
    -### 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: _1az
    d:\stuff\programmieren\autoit\codes\autofan\includes\authread-master\authread_edited_by_borstihd.au3(15,1): Warning for line:Call($CmdLine[2]) 
    
    -### 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: _1bx
    d:\stuff\programmieren\autoit\codes\autofan\includes\oneventfunc\oneventfunc.au3(342,1): Warning for line:Call($CtrlLib[$index][1][1], $Arrayset) 
    
    -### 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: _1cq
    d:\stuff\programmieren\autoit\codes\autofan\includes\autofan\threadhandling.au3(235,1): Warning for line:Call($sMainThreadFunction, "Timeout", $i) 
    
    -### 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: _1cr
    d:\stuff\programmieren\autoit\codes\autofan\includes\autofan\threadhandling.au3(304,1): Warning for line:Call($sMainThreadFunction, True, $iRow, $aSubThreadMsg) 
    
    -### 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: _1ft
    d:\stuff\programmieren\autoit\codes\autofan\includes\autofan\autologin.au3(224,1): Warning for line:Call($sFunction, $aArgs) 
    
    -#############################################################################################
    -#### Au3Stripper Found   6 Error(s)!!!!    This means your script could have problems running properly.  ####
    -#############################################################################################
    - 4.44 Iteration 1 Strip and Rename Functions result: Output  11921 lines and stripped 20655 lines
    - 11.97 Iteration 2 Strip Variables result: Output  6543 lines and stripped 5378 lines
    - 13.03 Iteration 3 Strip Variables result: Output  6275 lines and stripped 268 lines
    - 13.97 Iteration 4 Strip Variables result: Output  6269 lines and stripped 6 lines
    - 14.91 Iteration 5 Strip and Rename Variables result: Output  6269 lines and stripped 0 lines
    Alles anzeigen

    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:

    AutoIt
    Func _AuThread_Startup()
        ; was this process called for a thread?
        If $CmdLine[0] = 2 And $CmdLine[1] = "--au-thread" Then
            AdlibRegister("__AuThread_Checkloop")
            Call($CmdLine[2])  ;<<<<<<< Diese Zeile wurde markiert !!!
            Exit
        Else
            ; it's the main thread
            OnAutoItExitRegister("__AuThread_OnExit")
            FileDelete($__AuThread_sTmpFile)
            IniWrite($__AuThread_sTmpFile, "main", "pid", @AutoItPID)
        EndIf
    EndFunc
    Alles anzeigen


    Vielen Dank schon mal im Vorraus

    Viele Grüße

    borsTiHD

  • JSON-UDF

    • borsTiHD
    • 11. Juni 2018 um 16:54

    AAAAhhhhhhhhh... *scream* :|

    Danke, ja genau so... irgendwie kam ich nicht drauf.

    Jetzt lasse ich euch aber hoffentlich in Ruhe.

    Tausend Dank nochmal. :)

  • JSON-UDF

    • borsTiHD
    • 11. Juni 2018 um 16:36

    Sag das nicht, ist schonmal ein guter Ansatz für mich. :)

    Danke dir, da kann ich mich weiter einlesen.

    ----

    Ok, ich steh nochmal aufm Schlauch.

    Durch das ganze lesen und probieren hab ich schon Kopfschmerzen und bekomm es nicht hin.

    Hab auch keinen Durchblick mehr was ich jetzt schon alles probiert habe, deswegen habe ich mein kommendes Beispiel aufs nötigste reduziert.

    Mein neues Problem ist eine neue JSON Rückgabe in einem anderen Format.

    Wegen dem anderen Format schaffe ich es nicht die Items zu zählen. :/

    Bzw. durch alle Items mit einer Schleife durchzugehen.

    Könnt ihr mir dabei bitte nochmal helfen?

    Meine neue JSON Rückgabe ist in folgendem Beispielformat:

    Code
    [
        {
            "_object": "typ",
            "card": "test1"
        },
        {
            "_object": "typ",
            "card": "test2"
        },
        {
            "_object": "typ",
            "card": "test3"
        },
        {
            "_object": "typ",
            "card": "test4"
        }
    ]
    Alles anzeigen

    Hier würde ich auch gerne wieder die Items zählen und in einer Schleife zusätzlich durchgehen.

    Einzeln ansprechen kann ich die mit "_JSON_Get($o_Object, "[1]")" (wie im kommenden Beispiel gezeigt), aber ich würde gerne alle Items zählen.

    Quasi sowas wie ein _JSON_Get($o_Object, "").

    Hier mein Beispiel:

    AutoIt
    #include <JSON.au3>
    
    Example4()
    
    Func Example4()
        ConsoleWrite(@CRLF & @CRLF)
        ConsoleWrite(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" & @CRLF)
    
        Local $sJSONTest = '[{"_object": "typ","card": "test1"},{"_object": "typ","card": "test2"},{"_object": "typ","card": "test3"},{"_object": "typ","card": "test4"}]'
    
        Local $o_Object = _JSON_Parse($sJSONTest)
        ConsoleWrite("$o_Object: " & _JSON_Generate($o_Object) & @CRLF)
    
        $vTmp = _JSON_Get($o_Object, "[1]")
        ConsoleWrite("$vTmp: " & _JSON_Generate($vTmp) & @CRLF)
        ConsoleWrite("$vTmp.Count: " & $vTmp.Count & @CRLF)
    
        ;Hier würde ich gerne alle enthaltenden ITEMS zählen, in dem Beispiel wären es 4 und in einer Schleife einzeln durchgehen
    
    EndFunc
    Alles anzeigen
  • JSON-UDF

    • borsTiHD
    • 11. Juni 2018 um 12:09

    Ja perfekt, genau so hatte ich mir das Vorgestellt. :D

    Dann Danke ich euch Beiden nochmal vielmals. :) :thumbup:

    //€dit: Gibt es in der AutoIT Hilfe etwas bzgl. der Attribute bei Objekten/Dictionaries?

    Also im Grunde suche ich weitere Infos zu ".Count" ".Keys" , etc., dann würde ich mich da gerne tiefer einlesen.

    Auf die schnelle hab ich in der AutoIT Hilfe nichts gefunden, bzw wohl eher falsch gesucht.

  • JSON-UDF

    • borsTiHD
    • 11. Juni 2018 um 09:05

    Perfekt das klappt so wunderbar, damit kann ich weiter machen. :)

    Vielen Dank hierfür.


    ".Count" kann ich gut gebrauchen.

    _JSON_Generate($o_Object) geht auch wunderbar wie ich mir das vorstelle.

    Jetzt bräuchte ich nur noch bei einem Hilfe.

    Zitat von AspirinJunkie

    Das wäre dann soetwas wie XPath für XML oder CSS-Selektoren für HTML. Für JSON ist mir ein entsprechender Selector erstmal nicht bekannt.
    Aber prinzipiell kein Problem soetwas umzusetzen. Hab sowas auch schonmal für meinen XML-Parser gebastelt.

    Wird aber eine Zeit dauern bis ich wieder dazu komme - ist aber auf meiner Liste.[...]

    Wie ihr beide meintet, bekomme ich ja mit ".Count", oder Ubound die größe zurück.

    Damit würde ich gerne über eine Schleife mein "_JSON_Get($o_Object, "card")" durchgehen und alle Karten die existieren in ein Array laden.

    So das in dem Array nur noch die gefundenen Karten stehen (also in dem Beispiel sollte der Inhalt dann "[0] = 202, [1] = 208" sein.

    Anschließend kann ich mit einer weiteren Schleife, die das Array wiederum durchgeht die einzelnen Unterpunkte der Karten auslesen (also beispielsweise card.xxx.state - "xxx" ersetzt durch den Array Inhalt bei der Schleife).

    Meine Frage hier wäre, könntet ihr mir bitte ein Beispiel geben, wie ich die einzelnen Karten Namen in dieses Array bekommen könnte?

    Ich hab ab heute Urlaub für paar Tage, da kann ich wieder etwas basteln. :D

  • JSON-UDF

    • borsTiHD
    • 10. Juni 2018 um 11:54

    Hi zusammen,

    mir gefällt deine JSON UDF verdammt gut und nutze die sehr gern.

    Soweit komme ich auch mit klar und es funktioniert, bei einzelnen bzw. geziehlten Abfragen.

    Ich wollte dich/euch mal fragen wie ich folgendes dynamischer machen könnte:

    AutoIt
    Example()
    
    Func Example()
        Local $sJSONTest = '{"_curlState": "200","_mtstatus": "ok","stuff": {"link": "x1","state": "ok"},"card": {"202": {"admin": "a5","state": "ok"}, "208": {"admin": "a5","state": "ok"}}}'
    
        Local $o_Object = _JSON_Parse($sJSONTest)
    
        Local $s_Type =     _JSON_Get($o_Object, ".card.202.state") & "|" & _
                            _JSON_Get($o_Object, ".card.202.admin") & "|" & _
                            _JSON_Get($o_Object, ".card.208.state") & "|" & _
                            _JSON_Get($o_Object, ".card.208.admin") & "|" & _
                            _JSON_Get($o_Object, ".stuff.state") & "|" & _
                            _JSON_Get($o_Object, ".stuff.link")
    
        ;Rückgabe
        ConsoleWrite("$s_Type: " & $s_Type & @CRLF)
        ConsoleWrite("$o_Object: " & $o_Object & @CRLF)
    
    EndFunc
    Alles anzeigen

    Bei meiner echten JSON Abfrage bekomme ich bei "card" ein oder mehrere Rückgaben, mit einer jeweils nicht vorhersehbaren Nummer (zb. card.202, card.208).

    Gibt es eine Möglichkeit das ich beispielsweise nur ein _JSON_Get($o_Object, ".card") mache und dann alle Objekte ausgelesen bekomme?

    Bzw, kann ich, auch zu debug zwecken, mir den Inhalt dieser Objekte ($o_Object) in der Console, oder in ein Label ausgeben lassen?

    Eine weitere Frage wäre, kennt einer eine Möglichkeit die Objekte zu zählen?

    Ich würde gerne im obigen Beispiel wissen "wie viele" Objekte ich in "card" habe.

    Hier wären es dann die Anzahl "2" (card 202 und 208).

    Vielen Dank schon mal. :)

  • 2D Array - Doppelte Beziehungen bestimmter Spalten in einem Array ermitteln und löschen

    • borsTiHD
    • 22. April 2018 um 21:53

    Haha, ist kein Problem. :)

    Langeweile kann eine gute Motivation sein. xD

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™