Wir haben eine große Delphi XE Codebasis, die wir auf 64 Bit portieren wollen.
Ich besitze eine Delphi XE2-Lizenz und kann weder eine Warnung noch einen Hinweis finden, die mir helfen könnten, gültige 32-Bit-Konstruktionen zu erkennen, die jetzt unter einer 64-Bit-Plattform zu Datenverlust führen können. Zum Beispiel, THandle Zu Cardinal Zuweisungen, die perfekt mit dem 32-Bit-Compiler gültig waren, keine Warnung beim Kompilieren für Win64.
Bei der Migration zu Unicode mit Delphi 2009 hatten wir eine Menge Warnungen, die uns bei der Verfolgung und Behebung von verdächtigem Code sehr geholfen haben. Mit XE2 kann ich nichts finden. Ich kann mir nicht vorstellen, dass auf der Compiler-Ebene nichts integriert ist, um eine manuelle Überprüfung unseres gesamten Codes zu vermeiden.
Vermisse ich etwas? Wie hast du deine Projekte auf 64 Bit portiert, wenn du es versucht hast?
Danke!
Sie haben nichts vermisst. Es gibt nichts im Produkt, um Ihnen zu helfen.
Auch ich finde das ein wenig enttäuschend, aber ich erwarte voll und ganz, dass die Designer von Emba darüber nachgedacht haben. Ich kann nur folgern, dass ihre Erfahrung darin bestand, dass das Hinzufügen solcher Warnungen zu mehr Lärm als Signal geführt hat. Der Delphi-Compiler hat noch nie gewarnt, wenn inkompatible Integer-Typen zugewiesen wurden. Zum Beispiel war es nie eine Warnung oder ein Fehler, eine ganze Zahl einem Byte zuzuordnen.
Es ist Zeit, grep zu starten und nach Integer\(.*\)
, Longint\(.*\)
, Cardinal\(.*\)
, Longword\(.*\)
, THandle
usw. zu suchen.
Um auf Arnauds Kommentar und Antwort zu antworten, biete ich den folgenden Code an, der frei von Warnungen und Fehlern beim 64-Bit-Targeting erstellt.
%Vor%Vor ungefähr 5 Jahren habe ich sie auf 64-Bit Free Pascal portiert. (Auch wenn nur Teile mit einem einfachen Gerät getestet werden)
Das Testen mit beiden Compilern findet einfach mehr Probleme.
Wie Sie gesagt haben, kommen die meisten potenziellen Probleme von:
THandle
wurde nicht mehr auf integer
abgebildet, sondern auf NativeUInt
(dh cardinal
nur unter Win32); Integer
typecast nicht auf NativeInt
. Das letzte wird Compiler Fehler auslösen, nicht nur Warnungen (es ist eine explizite Typabweichung), und die THandle
Änderung sollte als gewarnt werden.
Ich werde nicht so hart mit Embarcadero über den Hauptcompiler sein - ich bin mehr mit den Hintergrundcompilern (zB CodeInsight) beschäftigt, um nicht mit dem Hauptcompiler synchronisiert . Für mich funktioniert der Hauptcompiler gut und ich beschwere mich nie über fehlende Warnungen. Suche nur explizit nach THandle
ist nicht so schwierig.
Tags und Links 64bit windows delphi delphi-xe2 win64