Guten Tag, liebe Leute.
Ich habe hier ein Windows 7 Professional 64 Bit und AutoIt 3.3.16.0 mit SciTE installiert.
Gestern machte ich die Entdeckung, dass _ArrayDisplay() nicht mit Null-Keywords im übergebenen Array umgehen kann und in eine Endlos-Schleife gerät.
Hier ein Beispiel:
Auch zweidimensionale Arrays sind davon betroffen und die Platzierung des Null-Keywords ist egal.
Meine Suche ergab, dass der Fehler in der Datei <ArrayDisplayInternals.au3> liegt, welche von <Array.au3> eingebunden wird. Dort wird von der Funktion __ArrayDisplay_Share() über weitere Funktionen die Funktion __ArrayDisplay_SortArrayStruct() aufgerufen. Darin kommt eine Do…Until-Schleife vor, welche bei Null-Keywords mit natürlicher Sortierung endlos läuft, weil in diesem Fall die DllCall()s den in der MSDN undokumentierten Wert -2 zurückgeben, der nicht abgefangen wird. Bei numerischer Sortierung liefern die Number()-Funktionen einfach 0, was zu keiner Endlos-Schleife führen sollte.
Dabei dient der erstmalige Aufruf von __ArrayDisplay_SortArrayStruct() über vorgeschaltete Funktionen eigentlich nur der Ermittlung der Sortierdauer einer Spalte.
Man könnte nach der If-Abfrage, also nach Zeile 801 eine Begrenzung mit If $r < -1 Or $r > 1 Then $r = 0 einfügen oder im nachfolgenden Switch-Teil aus Case 0 ein Case 0, -2 oder Case Else machen. Beide Varianten führen zu einem erfolgreichen Abbruch der Schleife bei Null-Keywords.
Schön wäre es allerdings noch, wenn auch wie bei den Bool-Keywords False und True das Wort Null im ListView der _ArrayDisplay()-GUI erscheinen würde, wenn dieses Schlüsselwort auftritt. Wo das bewerkstelligt werden kann, habe jedoch nicht herausgefunden.
Gruß, fee