Entwickeln von plattformübergreifenden 64-Bit-Anwendungen für Windows
Nach oben zu Plattformübergreifende Anwendungen - Index
Delphi unterstützt die Entwicklung von 64-Bit-Windows-Anwendungen auf einem nativen Win32-Entwicklungssystem oder einem Win64-Entwicklungssystem. (C++Builder unterstützt Win32- und Mac OS X-Anwendungen, aber keine Win64-Anwendungen.)
Inhaltsverzeichnis |
VCL, FMX und RTL unterstützen die 64-Bit-Windows-Anwendungsentwicklung
Alle drei Bibliotheken unterstützen Win32 und Win64:
- Die FMX-(FireMonkey-)Bibliothek unterstützt alle unterstützten Zielplattformen.
- Die VCL und die RTL wurden so geändert, dass sie mit 64-Bit-Anwendungen genauso wie mit 32-Bit-Anwendungen arbeiten. Wenn Sie nur die VCL und RTL verwenden, können Sie denselben Quellcode auf Win64- und Win32-Plattformen ausführen.
Für visuelle Komponenten müssen Sie zwei separate Anwendungen compilieren und jede für eine andere Zielplattform konfigurieren – eine für Win32 und eine für Win64. Sie erhalten dann eine .EXE für Win32 und eine weitere .EXE für Win64, jede ist so konfiguriert, dass in der Projektverwaltung die jeweils passende Zielplattform zugeordnet ist. Komponenten, Packages und Bibliotheken, die Sie während des Entwurfs verwenden, müssen als Win32-Versionen und als 64-Bit-Versionen vorliegen.
Konfigurieren einer plattformübergreifenden 64-Bit-Anwendung in der IDE
Für die 64-Bit-Plattform müssen Sie dem Knoten Zielplattformen in der Projektverwaltung die 64-Bit-Windows-Plattform hinzufügen und dann die 64-Bit-Windows-Plattform aktivieren (durch Doppelklick):
Wenn Sie zum Ausführen, Debuggen und Bereitstellen Ihrer 64-Bit-Anwendung ein Remote-Win64-Zielsystem verwenden (und Ihr Entwicklungssystem Win32 ist), sollten Sie in der IDE ein Remote-Profil erstellen und es Ihrer Zielplattform zuweisen.
Bei einem Win64-Entwicklungssystem ist die Verwendung eines Remote-Profils optional und nicht erforderlich.
64-Bit-Windows-Anwendungen verwenden die übliche Windows-API
Wenn Sie mit der Windows-API für die 32-Bit-Anwendungsentwicklung gearbeitet haben, sollten Sie mit vielen der Windows-API-Funktionen vertraut sein, die für die 64-Bit-Anwendungsentwicklung verfügbar sind.
Für das Ausführen, Debuggen und Bereitstellen ist Win64 erforderlich
Die Win64-Anwendungsentwicklung in RAD Studio ist per Definition eine plattformübergreifende Entwicklung, weil die IDE eine Win32-Anwendung ist. Das bedeutet, dass Sie bei der Ausführung einer Anwendung mit der 64-Bit-Windows-Zielplattform im Grunde die Anwendung auf der Win64-Plattform bereitstellen. Daher muss zur Laufzeit Ihr Entwicklungssystem entweder 64-Bit-Windows sein oder mit einem Win64-System verbunden sein.
Es gibt – abhängig davon, ob auf Ihrem Entwicklungs-PC ein 64-Bit- oder 32-Bit-Betriebssystem ausgeführt wird – zwei Szenarien zum Ausführen, Debuggen und Bereitstellen einer 64-Bit-Windows-Anwendung.
Verwenden eines 64-Bit-Entwicklungssystems
Wenn Ihr Entwicklungs-PC ein 64-Bit-Computer mit 64-Bit-Windows ist, können Sie Anwendungen genauso ausführen, debuggen und bereitstellen wie bei einer 32-Bit-Windows-Anwendung ohne den Platform Assistant und ohne ein Remote-Profil. Die Verwendung des Platform Assistant und eines Remote-Profils ist für Win64-Entwicklungssysteme optional und ermöglicht die Verwendung des Bereitstellungs-Managers für die Weitergabe Ihrer Anwendung.
Verwenden eines 32-Bit-Entwicklungssystems
Zum Ausführen, Debuggen oder Bereitstellen einer 64-Bit-Windows-Anwendung mit der IDE auf einem Win32-Entwicklungssystem müssen Sie:
- Den Platform Assistant auf dem 64-Bit-Zielsystem installieren und ausführen.
- Ein Remote-Profil auf dem Win32-Entwicklungssystem erstellen, das das 64-Bit-Zielsystem beschreibt.
- Eine Live-Verbindung zu der 64-Bit-Windows-Zielplattform sicherstellen. (Verwenden Sie Verbindung testen auf der Seite Tools > Optionen > Remote-Profile.)
Weitere Einzelheiten über die Verwendung des Platform Assistant und von Remote-Profilen finden Sie unter Schritte bei der Entwicklung von plattformübergreifenden Anwendungen.
Sie können eine Verbindung zu einem 64-Bit-PC entweder mit einem Standard-Ethernet-LAN oder einer Remote-Desktop-Verbindung herstellen. Weitere Informationen finden Sie unter Verbinden Ihres PC mit einem Win64-PC.
Hinweis: Wenn die Windows-Firewall auf dem Win64-Ziel aktiviert ist, erhalten Sie möglicherweise bei der ersten Verbindung von paserver mit dem Win64-Ziel eine Meldung der Windows-Firewall. Klicken Sie auf Zugriff zulassen (und belassen Sie "Private Netzwerke" unter "Kommunikation von paserver.exe unter diesen Netzwerken zulassen" ausgewählt).
Debuggen einer 64-Bit-Anwendung
Im Allgemeinen ist das Debuggen einer 64-Bit-Windows-Anwendung in RAD Studio dem Debuggen einer 32-Bit-Windows-Anwendung sehr ähnlich. Es gibt nur wenige Unterschiede. Z.B. sind die CPU-Fenster, wie die FPU-Ansicht, unterschiedlich.
Auf einem 32-Bit-Entwicklungssystem muss RAD Studio eine 64-Bit-Anwendung bereitstellen, damit sie gedebuggt werden kann. Das heißt, Sie müssen zur Laufzeit über eine Live-Verbindung zu einem 64-Bit-System verfügen. Bei einem 64-Bit-Entwicklungssystem können Sie Ihre Anwendung auf dem Entwicklungssystem ausführen und debuggen und müssen über keine Verbindung zu einem separaten Zielsystem verfügen.
Weitere Informationen finden Sie unter Debuggen von plattformübergreifenden Anwendungen.
Bereitstellen einer 64-Bit-Anwendung
Wenn Sie Platform Assistant und ein Remote-Profil verwenden, können Sie Ihre 64-Bit-Anwendung mit dem Bereitstellungs-Manager bereitstellen. Wenn Sie auf einem 64-Bit-Entwicklungssystem den Bereitstellungs-Manager verwenden möchten, müssen Sie ein Remote-Profil erstellen, das das Zielsystem für die Bereitstellung beschreibt. Siehe Bereitstellung von plattformübergreifenden Anwendungen.
Überlegungen für 64-Bit-Anwendungen
Für 64-Bit-Komponenten, -Packages und -Bibliotheken sind 32-Bit-Entwurfszeitversionen erforderlich
Wenn Sie 64-Bit-Komponenten, -Packages oder -Bibliotheken erstellen, müssen Sie über deren 32-Bit-Entwurfszeitversionen verfügen, damit Sie diese Komponenten, Packages und Bibliotheken während der Anwendungsentwicklung in der IDE verwenden können. Dies ist erforderlich, weil die IDE ein 32-Bit-Windows-Programm ist.
Wenn Sie beispielsweise den Experten Neue Komponente verwenden, müssen Sie zunächst eine 32-Bit-Version Ihrer Komponente erstellen. Später compilieren Sie Ihre Komponente erneut als eine Win64-Komponente, indem Sie die Zielplattform auf 64-Bit-Windows setzen (in der Projektverwaltung). RAD Studio speichert die Ausgabedateien (wie .bpl und .dcp) in plattformspezifischen Verzeichnissen in Ihrem Projektausgabeverzeichnis.
Erzeugen und Importieren von 64-Bit-Typbibliotheken
In einer 64-Bit-Anwendung (wie z.B. einige 64-Bit-Anwendungen von MS Office) kann eine 32-Bit-Typbibliothek verwendet werden.
Wenn die aktuelle Zielplattform 64-Bit-Windows ist, übergibt die IDE jetzt "-E64" an GenTLB.exe. Das Ergebnis ist eine Typbibliothek, deren Feld SYSKIND SYS_WIN64 enthält (im Vergleich zu SYSKIND=SYS_WIN32 für eine 32-Bit-Typbibliothek).
Wenn Sie eine 64-Bit-Typbibliothek importieren, die von einer anderen nur in den 64-Bit-Schlüsseln der Registrierung registrierten Typbibliothek abhängt, müssen Sie die 64-Bit-Version von TLIBIMP.EXE aus dem folgenden Verzeichnis verwenden:
$(bds)\bin64\tlibimp.exe
Komponenten zur Entwurfs- und Laufzeit verfügbar machen
Die IDE stellt anhand der beiden folgenden Methoden fest, ob eine Komponente für Win32/Win64/OSX32 verfügbar ist. (Hier bedeutet "verfügbar", dass die Komponente in der Palette angezeigt und von der IDE überprüft wird. Die IDE führt zur Compilierzeit lediglich eine Prüfung auf Vorhandensein der Komponenten-Unit durch.) Die beiden hier beschriebenen Methoden beziehen sich auf Daten, die im Win32-Laufzeit-Package (oder Entwurfszeit- und Laufzeit-Package) eingebettet sind, das die Komponenten implementiert. Die IDE kann keine Win64- und OSX32-Packages in die IDE laden, daher muss die IDE die benötigten Informationen aus dem Win32-Package verwenden.
- Das RAD Studio-Build-System bettet automatisch eine RC_DATA-Ressource in die binäre Win32-Package-Datei PLATFORMTARGETS ein. Dabei handelt es sich um die Bitmaske der pidXXX-Konstanten aus der Unit System.Classes.pas, und diese gibt die Zielplattformen des Package-Projekts an. Die IDE liest diese Informationen beim Laden des Package und legt beispielsweise anhand dieser Informationen fest, ob die Komponente/Komponenten in der Palette deaktiviert wird/werden, wenn eine nicht unterstützte Plattform aktiv ist.
- Wenn ein Komponenten-Package für mehrere Plattformen eingesetzt werden soll, schließt dies eine "Vereinbarung" zwischen dem Komponentenentwickler und der IDE ein. Wenn ein Komponenten-Package-Projekt für mehrere Plattformen eingesetzt werden soll und der Entwickler das Win32-Laufzeit-Package (und alle zugehörigen compilierbaren und linkbaren Dateien) an Kunden weitergibt, wird davon ausgegangen, dass der Entwickler auch alle erforderlichen compilierbaren, linkbaren und Laufzeitbestandteile für die anderen Zielplattformen weitergibt.
- Einzelne Komponenten können mit dem Klassenattribut ComponentPlatformsAttribute die Daten in PLATFORMTARGETS anhand einer Bitmaske derselben Konstanten aus der Unit Classes überschreiben. Zum Beispiel:
type [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // not supported on OSX TMyComponent = class(TComponent) private ... end;
- Die Verwendung dieses Attributs unterliegt derselben Vereinbarung wie oben beschrieben.
Windows-Programmierung
- Windows-API-Aufrufe müssen 64-Bit-Versionen sein.
- Try-Blöcke werden in 64-Bit-Programmen unterstützt.
- Sie können 32-Bit- und 64-Bit-Code nicht in demselben Prozess verwenden.
- Für DLLs, Komponenten, Bibliotheken und Packages ist es erforderlich, dass Sie separate 32-Bit-Versionen (Entwurfszeit) und 64-Bit-Versionen (Laufzeit) compilieren oder installieren, wenn Sie den Formular-Designer verwenden möchten.
- 64-Bit ist für BS-Erweiterungen und Shell-Erweiterungen erforderlich.
- Die Größe von LRESULT, WPARAM und LPARAM wird auf 64 Bit erweitert, daher müssen Botschaftsbehandlungsroutinen bezüglich ungeeigneter Typumwandlungen überprüft werden.
Assembly-Programmierung
- Die meisten Register einer 64-Bit-CPU sind zweimal so groß wie die in einer 32-Bit-CPU. Die Größe des Anweisungsregisters (IR) ist jedoch bei 32-Bit- und 64-Bit-Prozessoren noch gleich.
- Sie können Inline Assembler für 64-Bit-Code mit einigen Einschränkungen verwenden:
- Keine Vermischung von Assembly- und Pascal-Code in einem Block. Funktionen müssen vollständig in Assembly oder Pascal geschrieben werden.
- Schränken Sie die direkten Stack-Zeiger-Änderungen (RSP) ein.
- Verwenden Sie neue Pseudo-Ops:
- .SAVENV
- .PUSHNV
- .PARAMS
- .NOFRAME
Weitere Informationen finden Sie unter:
- #64-Bit-Inline-Assembler|64-Bit-Inline-Assembler von Delphi
- Delphi-Assembler-Prozeduren und -Funktionen
Themen zu 64-Bit-Anwendungen
- Verbinden Ihres PC mit einem Win64-PC
- 64-Bit-Windows-Anwendung "Hello World"
- 64-Bit-Datentypen im Vergleich zu 32-Bit-Datentypen
- Konvertieren von 32-Bit-Delphi-Anwendungen in 64-Bit-Windows
Siehe auch
- Unterschiede zwischen Windows und anderen Plattformen
- Plattformübergreifende Anwendungen entwickeln
- Compilieren und Erzeugen von plattformübergreifenden Anwendungen
- Debuggen von plattformübergreifenden Anwendungen
- DCC64.EXE: Der Delphi-64-Bit-Befehlszeilen-Compiler
- 64-bit Programming in Assembly
- Differences between Win32 and Win64 - FAQ
- Matt Pietriek's Getting Started with 64-Bit
- Detaillierte Informationen über PE-Dateiformate von Matt Pietriek
- Kleine C-Laufzeitbibliothek:
- Just Enough Assembly Language to Get By (2 Teile):
- Microsoft PE Section names
