Anzeigen: Delphi C++
Anzeigeeinstellungen

Entwickeln von plattformübergreifenden 64-Bit-Anwendungen für Windows

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

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):

ActiveWindows64Platform.png

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:

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:

Themen zu 64-Bit-Anwendungen

Siehe auch

Frühere Versionen
In anderen Sprachen