Little Memory write problem

03/11/2014 12:03 md88#1
Hallo Community,
Ich habe ein kleines Problem. In meinem S4 League Trainer sorgt irgendwas dafür das die Memorys in S4 League nicht "überarbeitet wird". (Kann das grade nicht richtig ausdrücken ^^') jedenfalls hier der Code:
Währe nett, wenn mir jemand sagen könnte, wieso der nicht funktionier ^^'. P.s. Die Adressen sollten die richtigen sein. Habe es mit, hex und dezimal probiert. Ist jetzt in dem Code dezimal.(oder mach ich doch was falsch ? )

Vielen dank im vorraus :D
03/11/2014 13:55 YatoDev#2
adressen beginnen immer mit 0x
03/11/2014 14:52 KDeluxe#3
Nein! Man kann Adressen auch in Dezimalschreibweise angeben, in diesem Fall haben sie natürlich keinen Hex-Präfix (0x). Der TE hat auch explizit erwähnt, dass im aktuellen Code die Dezimalschreibweise verwendet wird.
Negativ hierbei ist aber, dass die Zahlen als String angegeben werden. AutoIt ist nicht typensicher, daher ist es bei Dezimalschreibweise egal. Folgendes funktioniert ist aber falsch:
Code:
$iBkColor="0xF1EDED"
AutoIt wertet den String nicht aus. Deshalb funktioniert dieser Vergleich nicht, obwohl die Zahlen theoretisch die selben sind:
Code:
If "255" = "0xFF" Then MsgBox(0, "", "1") ; funktioniert nicht
If 255 = 0xFF Then MsgBox(0, "", "2") ;funktioniert
Zahlen sollte man explizit als solche angeben. Ich weiß nicht, wie AutoIt den Speicher verwaltet, aber bei typsicheren Sprachen braucht 0xFFFFFFFF lediglich 4 Byte, wohingegen der String "0xFFFFFFFF" 10 bzw. 20 Byte benötigt.


Zum eigentlichen Problem:
Dein Script ist recht schlampig. Du solltest bei den Memory-Funktion auf Rückgabewerte und/oder Fehler achten. Ausgeführt werden die Befehle zum ändern des Speichers außerdem nur dann, wenn du auf den Button klickst. Einmalig. Prüfe besser in der While-Schleife den Zustand der Checkboxen und manipuliere dann den Speicher entsprechend.
03/11/2014 20:38 YatoDev#4
Quote:
Originally Posted by KDeluxe View Post
....
ich weis...

Die nomad memory verlangt aber diese schreibweise
03/11/2014 21:23 lolkop#5
Quote:
Originally Posted by KDeluxe View Post
Folgendes funktioniert ist aber falsch:
Code:
$iBkColor="0xF1EDED"
AutoIt wertet den String nicht aus. Deshalb funktioniert dieser Vergleich nicht, obwohl die Zahlen theoretisch die selben sind:
Code:
If "255" = "0xFF" Then MsgBox(0, "", "1") ; funktioniert nicht
If 255 = 0xFF Then MsgBox(0, "", "2") ;funktioniert
Zahlen sollte man explizit als solche angeben. Ich weiß nicht, wie AutoIt den Speicher verwaltet, aber bei typsicheren Sprachen braucht 0xFFFFFFFF lediglich 4 Byte, wohingegen der String "0xFFFFFFFF" 10 bzw. 20 Byte benötigt.
das ist nicht ganz richtig...

vergleicht man aber zwei strings, so werden diese immer auf inhalt überprüft (wie es auch in der regel erwünscht ist). entsprechend kann "255"="0xFF" nur false ergeben. "255"=255, "255"=0xFF, "0xFF"=255, "0xFF"=0xFF hingegen sind immer wahr.

autoit handelt aber binarys von unbestimmter länge allgemein als strings.
die schreibweise von hexadezimalen werten als string ist dementsprechend nicht nur korrekt, sondern bei werten > 0xFFFFFFFF sogar unvermeidlich.

Edit:
die hilfe gibt es in diesem falle noch genauer her... 2 strings werden immer lexiografisch vergleichen (buchstabe für buchstabe). dh "255">"0xFF" da "2">"0".
entsprechend wird es hier bei verwendung von sehr großen zahlen bzw hex werten (in stringschreibweise) schwer, diese miteinander zu vergleichen. hier müsste man entsprechend mit stringoperationen tricksen.
03/11/2014 21:58 YatoDev#6
Quote:
Originally Posted by lolkop View Post
die hilfe gibt es in diesem falle noch genauer her... 2 strings werden immer lexiografisch vergleichen (buchstabe für buchstabe). dh "255">"0xFF" da "2">"0".
entsprechend wird es hier bei verwendung von sehr großen zahlen bzw hex werten (in stringschreibweise) schwer, diese miteinander zu vergleichen. hier müsste man entsprechend mit stringoperationen tricksen.
warum sollte jemand das als string vergleichen ? zahlen sind keine strings also schreibt man die ohne "" und 0xFFFFFF kann man ja auch ohne schreiben (mach ich auch immer)
03/11/2014 22:10 lolkop#7
Quote:
Originally Posted by »FlutterShy™ View Post
warum sollte jemand das als string vergleichen ? zahlen sind keine strings also schreibt man die ohne "" und 0xFFFFFF kann man ja auch ohne schreiben (mach ich auch immer)
dann führe mal mit einer beliebigen autoit version eine beliebige mathematische operation mit der zahl: 0x00000000000000001 (entspricht 1) durch...

autoit ist was die hexadezimale, wie auch dezimale schreibweise angeht leider sowohl in der länge, als auch im umfang sehr beschränkt, wodurch für viele operationen die verwendung von strings unumgänglich ist.
03/11/2014 22:13 YatoDev#8
moment. dachte das geht mit dem 64 bit compiler oder nicht ? ansonsten haste recht