Portierung von Delphi-Code auf 64 Bit - Warum keine Compiler-Warnungen?

9

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!

    
Adrien Reboisson 04.11.2011, 19:25
quelle

3 Antworten

2

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%     
David Heffernan 04.11.2011 22:02
quelle
0

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.

    
Marco van de Voort 04.11.2011 19:27
quelle
0

Wie Sie gesagt haben, kommen die meisten potenziellen Probleme von:

  • WinAPI ändert sich (aber meistens identisch / kompatibel);
  • THandle wurde nicht mehr auf integer abgebildet, sondern auf NativeUInt (dh cardinal nur unter Win32);
  • In der Zeigerarithmetik wurde Integer typecast nicht auf NativeInt .
  • abgebildet

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.

    
Arnaud Bouchez 05.11.2011 10:47
quelle