ich bin Neueinsteiger in AutoIT, komme von C++ und habe die wunderbare Eigenschaft von AutoIT gefunden, einfach dynamische Bibliotheken zu nutzen um die Begrenztheit mehr oder minder auszugleichen.
Also wollte ich ein wenig an der Konsole rumfrickeln, funktioniert auch bisher, allerdings habe ich folgendes Problem:
Die Methode gibt mir immer false zurück. Weiß jemand worans liegt?
als Parameter habe ich einfach "struct" als Typ gewählt, da structs wie "COORD" ja nicht registriert sind. Scheint aber nicht zu funktionieren. Handle der Konsole ist gegeben. Error wird nicht gesetzt (Aufruf war erfolgreich), schreibt jedoch in die Variable [0]:0, [1]:0x000..0, Extended wird auf 6 gesetzt (GetLastError()).
Doku zu SetConsoleCursorPosition: .
$STD_OUTPUT_HANDLE = 0xfffffff5, wie in Winbase.h definiert.
$result ist eine neue Variable, sollte eigentlich in der Deklaration im Kopf der Methode stehen. Alle anderen Variablen sind lokal.
ich bin Neueinsteiger in AutoIT, komme von C++ und habe die wunderbare Eigenschaft von AutoIT gefunden, einfach dynamische Bibliotheken zu nutzen um die Begrenztheit mehr oder minder auszugleichen.
Also wollte ich ein wenig an der Konsole rumfrickeln, funktioniert auch bisher, allerdings habe ich folgendes Problem:
Die Methode gibt mir immer false zurück. Weiß jemand worans liegt?
als Parameter habe ich einfach "struct" als Typ gewählt, da structs wie "COORD" ja nicht registriert sind. Scheint aber nicht zu funktionieren. Handle der Konsole ist gegeben. Error wird nicht gesetzt (Aufruf war erfolgreich), schreibt jedoch in die Variable [0]:0, [1]:0x000..0, Extended wird auf 6 gesetzt (GetLastError()).
Doku zu SetConsoleCursorPosition: .
Vielen Dank im Voraus
schau doch einfach mal in die dokumentation zu DllCall:
Quote:
If the function call fails then @error is set to non-zero.
Otherwise an array is returned that contains the function return value and a copy of all the parameters (including parameters that the function may have modified when passed by reference).
$return[0] = function return value
$return[1] = param1
$return[2] = param2
...
$return[n] = paramn
DllCall gibt immer ein array zurück (wenn der funktionsaufruf nicht fehlschlägt). fragt man ein beliebiges array als normale variable ab, so wird IMMER False (0) zurück gegeben.
entsprechend kann $result bei dir nur false zurück geben.
schau doch einfach mal in die dokumentation zu DllCall:
DllCall gibt immer ein array zurück (wenn der funktionsaufruf nicht fehlschlägt). fragt man ein beliebiges array als normale variable ab, so wird IMMER False (0) zurück gegeben.
entsprechend kann $result bei dir nur false zurück geben.
Die Funktion selber gibt BOOL zurück. Eine ähnliche Funktion ist MoveWindow(). Diese schreibt mir "true" in $result, wenn sie ausgeführt wurde (also setzt den Bitwert auf != 0).
Die Funktion selber gibt BOOL zurück. Eine ähnliche Funktion ist MoveWindow(). Diese schreibt mir "true" in $result, wenn sie ausgeführt wurde (also setzt den Bitwert auf != 0).
du scheinst nicht zu verstehen, das dllcalls arrays zurück geben...
Code:
Dim $array[1]=[5]
ConsoleWrite(Not $array&@CRLF)
wird immer True zurückgeben... 5!=0 und somit True in Autoit. Da $array aber ohne index verwendet wurde, ist $array immer False.
Code:
Dim $array[1]=[5]
ConsoleWrite(Not $array[0]&@CRLF)
hingegen gibt wie erwartet False zurück da der Index auf das erste element verweist.
in deinem beispiel musst du entsprechend $result[0] nutzen, um den ersten eintrag des ergebnisarrays zu erhalten.
korrekt wäre also zb: