Considérations Delphi pour les applications multi-périphériques
Remonter à Considérations pour les applications multi-périphériques
Sommaire
- 1 Le type de données Extended est différent sur les différentes plates-formes
- 2 Les types de données LongInt et LongWord sont différents sur les plates-formes POSIX 64 bits
- 3 Prise en charge de la plate-forme cible macOS 64 bits (ARM)
- 4 Problème d'alignement de pile sur macOS
- 5 Migration des applications Delphi de Win32 vers macOS
- 6 Migration des applications Delphi de Win32 vers Win64
- 7 Migration des applications Delphi de Win32 vers Linux64
- 8 Migration des applications de bureau Delphi en applications mobiles
- 9 Dans les compilateurs C++ basés sur Clang, le mot clé 'absolute' n'est pas pris en charge dans Interop entre Delphi et C++Builder
- 10 Limitations de l'assembleur inline
- 11 Voir aussi
Le type de données Extended est différent sur les différentes plates-formes
La taille du type de données Extended est différente sur chaque plate-forme. Le type Extended fournit la plus grande précision en virgule flottante et dépend du matériel utilisé à l'exécution.
- Sur les plates-formes Windows 32 bits Intel, la taille du type Extended est (toujours) de 10 octets.
- Sur les plates-formes Windows 64 bits Intel, le type Extended est l'alias d'un Double, ou 8 octets.
- Sur les plates-formes Linux 64 bits Intel et macOS 64 bits Intel, la taille du type Extended est de 16 octets.
- Sur les plates-formes ARM, notamment iOS 64 bits, macOS 64 bits ARM, simulateur iOS ARM 64 bits et Android (32 et 64 bits), le type Extended est l'alias d'un Double, ou 8 octets.
Vous obtenez ainsi une précision inférieure en utilisant le type de données Extended sur les plates-formes Win64 ou ARM par rapport à Win32. Si vos applications utilisent le type de données Extended et si vous accordez une grande importance à la précision, comme pour les opérations à virgule flottante, cette différence de taille peut affecter vos données.
Les valeurs très petites ou très grandes sont les plus affectées. Voici la précision des deux types de données :
- 1x10308 IEEE Double, supporté par le type Extended 8 bits sur les plates-formes Windows 64 bits Intel et toutes les plates-formes ARM
- 1x104932 IEEE Extended, supporté par le type Extended 8 et 16 bits sur les plates-formes POSIX Intel
Si votre base de code contient le type de données Extended, vous recevrez le message de conseil : W1066 Perte de la précision à virgule flottante étendue. Réduction à Double (Delphi). Les opérations à virgule flottante en précision étendue 10 octets sont prises en charge dans les applications Windows 32 bits Intel et ne le sont pas dans les applications Windows 64 bits Intel. Sur Windows 64 bits Intel, la précision des opérations à virgule flottante avec des variables Extended est réduite à la précision double.
L'enregistrement TExtended80Rec peut être utilisé pour travailler avec des variables à virgule flottante en précision étendue sur toutes les plates-formes, mais seulement pour lire ou écrire en mémoire et pour effectuer des modifications de bas niveau (modification de la mantisse, de l'exposant ou du signe).
Pour de plus amples informations sur les types de données 64 bits, voir Types de données Windows 64 bits comparés aux types de données Windows 32 bits.
Les types de données LongInt et LongWord sont différents sur les plates-formes POSIX 64 bits
Pour conserver l'interopérabilité entre l'API Delphi et POSIX, pour toutes les plates-formes POSIX 64 bits, la taille des types LongInt et LongWord est changée en 64 bits. Toutes les plates-formes 32 bits et Windows 64 bits conservent la taille de 32 bits pour les types LongInt et LongWord.
Prise en charge de la plate-forme cible macOS 64 bits (ARM)
La plate-forme macOS 64 bits (ARM) cible de façon native les processeurs M1 Silicon d'Apple avec macOS 11. Utilisez cette plate-forme pour construire des applications M1 natives (vous devez pour cela utiliser un ordinateur M1).
Créez tout type d'applications pris en charge (applications console, applications FireMonkey de base, applications de bases de données FMX, etc.) et exploitez la version universelle incorporée d'InterBase, IBLite.
Fichiers binaires universels
Créez un fichier binaire universel contenant à la fois du code Intel et ARM. Assurez-vous que la plate-forme cible est définie sur macOS 64 bits (ARM). Dans Options de projet, accédez à Construction > Compilateur Delphi > Compilation > Other, et cochez l'option "Générer le fichier binaire universel macOS (x86_64 + arm64)". Déployez l'application. Le gestionnaire de déploiement combine deux fichiers binaires dans un seul fichier binaire "universel" ; avant de transférer l'application vers la plate-forme macOS cible. Le fichier binaire universel se trouve sous le dossier OSXARM64\Debug.
Problème d'alignement de pile sur macOS
Pour les applications macOS, toutes les données mémoire doivent avoir un alignement de pile sur des limites de 16 octets, ce qui pose un problème majeur :
- Pour plus de détails, voir le blog d'Eli Boling.
- Pour les applications Delphi, vous pouvez utiliser la directive Aligner le code Delphi pour définir des limites de 16 octets.
- Voir aussi la définition de ALIGN_STACK dans Compilation conditionnelle Delphi.
Migration des applications Delphi de Win32 vers macOS
Le tableau suivant récapitule comment les différentes plates-formes sont prises en charge par les diverses bibliothèques dans RAD Studio :
Bibliothèque \ Plate-forme | Win32 | Win64 | macOS 64 bits |
---|---|---|---|
FMX |
|
|
|
RTL |
|
|
|
VCL |
|
|
Non pris(e) en charge |
Des exceptions existent dans la prise en charge de la RTL et de la VCL pour des plates-formes spécifiques. </blockquote>
La VCL est uniquement prise en charge sur Windows et ne prend pas en charge macOS. Les applications ciblant macOS doivent être construites avec FireMonkey (FMX).
Par contre, la majorité de la bibliothèque d'exécution Delphi (RTL) prend en charge toutes les plates-formes cible supportées. La RTL contient les unités System, SysUtils et IOUtils, ainsi que d'autres, qui contiennent des éléments indépendants de la plate-forme.
- Les applications Delphi qui utilisent seulement la RTL (pas la VCL) fonctionnent sur Win64 avec quelques changements.
- Toute application Delphi qui utilise la VCL et/ou la RTL supporte Win32 et Win64.
Pour de plus amples informations sur la RTL, voir Utilisation de la RTL (bibliothèque d'exécution).
Pour plus d'informations sur FireMonkey, voir FireMonkey.
Pour de plus amples informations sur la VCL, voir Introduction à la bibliothèque des composants visuels (VCL).}}
Migration des applications Delphi de Win32 vers Win64
La VCL, le framework FMX et la RTL sont pris en charge sur Win32 et Win64.
Pour le développement d'applications Delphi Win64, voir Développement d'applications Windows 64 bits.
Migration des applications Delphi de Win32 vers Linux64
La VCL et le framework FMX ne sont pas pris en charge sur les plates-formes Linux. Pour le moment, Linux prend uniquement en charge les applications console. Néanmoins, le produit FmxLinux, disponible via le Gestionnaire de packages GetIt, permet d'utiliser Linux comme cible pour les applications FMX. Pour de plus amples informations, consultez la page FireMonkey pour Linux.
Pour le développement d'applications Linux Delphi, voir Développement d'applications Linux.
Migration des applications de bureau Delphi en applications mobiles
Dans les compilateurs C++ basés sur Clang, le mot clé 'absolute' n'est pas pris en charge dans Interop entre Delphi et C++Builder
Si vous voulez écrire du code Delphi qui exécute Interop avec les compilateurs C++ améliorés par Clang, vous ne pouvez pas utiliser la directive/le mot-clé Delphi "absolute" dans la section interface d'une app Delphi lors de l'exécution d'Interop avec l'un quelconque des compilateurs C++ améliorés par Clang. Toutefois, vous pouvez utiliser le mot-clé "absolute" dans la section implementation.
LLVM n'offre pas de mécanisme pour l'overlay d'une variable avec une autre. C++Builder suppose donc qu'un symbole unique est utilisé pour chaque variable.
Limitations de l'assembleur inline
Si votre base de code contient du code assembleur inline, il est possible que des modifications du code soient nécessaires pour le portage sur les nouvelles plates-formes. Pour plus d'informations, voir les rubriques suivantes :
Pour les plates-formes Windows 64 bits Intel
Pour les plates-formes ARM et POSIX Intel
Ces plates-formes ne prennent pas en charge l'assembleur inline.