Ich wollte mir mal wieder das aktuelle Xojo ansehen und schauen, wie sich meine Anwendung verhlt.
Da ich derzeit noch immer mit RS010r1 arbeite, bin ich es gewohnt, dass ich einiges anpassen muss. Anscheinend ist mal wieder etwas hinzugekommen
BinaryStream kennt WriteLong, ReadLong, etc nicht mehr.
Gibt es eine âbersetzungsmatrixâ? Sprich, was wird jetzt dafr als Ersatz angeboten?
HmmmâŠ
Ich habe mal in der Sprachreferenz von REALstudio 2010r1 nachgesehen. Da gibt es WriteLong auch schon nicht mehr (wird im Code aber nicht bemngelt und beim automatischen Vervollstndigen angeboten). Ist das noch aus Zeiten von REALbasic 3.0 oder 3.5?
âŠ
Merkwrdig.
Ich habe folgenden Code getestet (RS2010):
Dim WriteToFile as BinaryStream
Dim f as FolderItem
f=GetSaveFolderItem(ââ,ââ)
If f <> Nil Then
WriteToFile=BinaryStream.Create(f,true)
WriteToFile.WriteLong &h0
WriteToFile.close
End If
Das Ergebnis habe ich mir in TextWrangler angesehen (Hex Dump Front Document) und erhalte:
0000: 00 00 00 00 00 00 00 00
Soweit hatte ich es erwartet. Nun eine kleine nderung:
WriteToFile.WriteLong &hFFFFFFFF
Ich erhalte in TextWrangler:
0000: C7 02 C7 02 C7 02 C7 02
Warum nicht:
0000: FF FF FF FF FF
Ich bin verwirrt!
Wie bekomme nun heraus, ob ich WriteInt64 oder WriteInt32 nehemen sollte?
Ergibt bei mir auch 4 Bytes.
Warum meckert RS nicht schon bei dem viel zu groem Wert?
&hFFFFFFFFFFFFFFFF sind fr mich 16 Bytes.
Warum der TextWrangler bei einem Hex Dump berhaupt etwas interpretiert, ist mir ebenso ein Rtsel.
Auch wenn ich etwas verwirrt bin, hatte ich eigentlich ohnehin 32 Bit erwartet, da ich eigentlich berall nur Interger-Werte damit sichere. Die sollten in RS (IMHO) immer 32 Bit haben.
Hmm⊠OK.
Ich habe meinen Code in Xojo gerade auf .WriteInt32 gendert. Danke!
Jetzt habe ich noch ein altes ZIPCompress_class, welches ReadShort nutzt. Da muss ich mal scheun, ob es etwas aktuelles gibt oder ob ich es rauswerfen kann.
Die Regel ist auch bei einigen anderen Sprachen so, wie etwas lower-level sind: Integer-GröĂe entspricht der von Pointern. Also 4 Byte 32 Bit-Builds und 8 Byte bei 64 Bit-Builds.
Das ist so gemacht, weil z.B. das OS (wie OSX) das auch so will, denn es ĂŒbergibt dann auch allerlei Parameter in der ânativenâ GröĂe. D.h, wenn man Declares macht, kann man ĂŒberall âIntegerâ drin lassen, weil die Parameter sich dann von 32 auf 64 Bit mit anpassen.
Blöde wirdâs bei Strukturen, wie man sie z.B. braucht, wenn man Libs aufruft oder MemoryBlocks dafĂŒr benutzt. Da muĂ man dann teils ganz schon Arbeit reinstecken. FĂŒr meine Zip-Klassen war das z.B. nötig, um die zlib-Funktionen richtig unter 64 Bit zu nutzen.
Um es abschlieend aufzuklren:
Ich habe ursprnglich Int64 eingesetzt. Nach den Empfehlungen hier und meinen Versuchen war ich von Int32 berzeugt und habe WriteInt64 durch WriteInt32 ersetzt. Da ich dasselbe fr Read vergessen hatte, kam dann beim ersten Versuch dann das Ergebnis. Die eingelesenen Schleifenzhler waren zu gro.
Fazit: In meinem Fall (.WriteLong und .ReadLong ind REALstudio 2010r1) ist eine Konvertierung in WriteInt32 bzw ReadInt32 richtig gewesen.
BTW, wird es eine 64-Bit Version von Deinen ZipFolderItem-Klassen (mit Wegfall der 4GB Beschrnkung fr Dateien) geben?
Ich habe in letzter Zeit nicht danach gesucht, fand die ZipFolderItem-Klassen aber seinerzeit gut, da ich sie wie FolderItems nutzen konnte.
Gibt es da ein Plugin, das mit DateigröĂen ĂŒber 4GB zurecht kommt und Ă€hnlich einfach in der Nutzung ist?