Différences entre Windows et macOS
Remonter à Considérations pour les applications multi-périphériques
Quand vous commencez le développement multi-périphérique pour macOS 64 bits (Intel) ou macOS 64 bits (ARM), vous devez comprendre et être capable de gérer de nombreux problèmes, notamment ceux décrits ci-dessous.
Sommaire
- 1 Gestion différente des exceptions
- 2 Différences d'alignement entre Mac et Windows
- 3 Accès aux variables globales dans ASM sur Windows et macOS
- 4 Les bibliothèques Windows sont seulement disponibles pour les applications Windows
- 5 Equivalence des extensions de fichiers sur le Mac et Windows
- 6 Equivalence des éléments de ligne de commande sur le Mac et Windows
- 7 Voir aussi
Gestion différente des exceptions
Les systèmes Mac et Linux utilisent des exceptions mappées - PC (Program Counter), tandis que Windows (Win32) utilise des enregistrements de registre liés sur la pile.
Vous devez adapter votre gestion des exceptions au type utilisé sur votre plate-forme cible. En particulier, il existe des différences dans la façon de coder les routines assembleur, dans le cas où une exception pourrait être déclenchée derrière elles. Pour de plus amples informations, voir Exceptions mappées - PC (Program Counter)#Déroulement des routines assembleur.
Sur les plates-formes macOS 64 bits (Intel) et macOS 64 bits (ARM), la gestion des exceptions structurées (__try/__except) n'est pas disponible. Pour de plus amples informations, voir Développement d'applications MacOS#Gestion des exceptions.
Pour obtenir des informations générales sur la gestion des exceptions, voir :
- Gestion des exceptions (Delphi)
- Gestion des exceptions dans C++Builder
- Blog de Eli sur la gestion des exceptions Mac OS : http://blogs.embarcadero.com/eboling/2009/11/10/5628
Différences d'alignement entre Mac et Windows
- Les problèmes d'alignement se rapportent seulement au développement utilisant du code assembleur.
- Un binaire d'application Mac utilise des intervalles de 16 octets.
- La pile SO (objet partagé) doit contenir des unités de 16 octets.
- L'environnement Mac détruit tout processus qui ne correspond pas à l'alignement sur 16 octets.
- Voir le blog de Eli relatif à la pile sur Mac : http://blogs.embarcadero.com/eboling/2009/10/13/5620
WideChar
contrewchar_t
(wchar_t
est de 2 octets sur Windows contre 4 octets sur macOS)tchar.h
ne fonctionne pas sur un Mac (ou Linux)
Deux directives du compilateur Delphi contrôlent l'alignement :
- Aligner le code (Delphi) {$CODEALIGN}
- Aligner les champs (Delphi) {$A}
Accès aux variables globales dans ASM sur Windows et macOS
Sur macOS 64 bits (Intel) et macOS 64 bits (ARM), les variables globales sont adressées en utilisant du code indépendant de la position (PIC). Cela affecte votre capacité à accéder aux variables globales dans ASM.
Si vous avez déclaré une variable globale ainsi :
var GlobalVar: UInt32 = $12345678;
Puis prévoyez d'obtenir la VALEUR de cette variable dans le code ASM comme suit :
function GetGlobalVar: UInt32; asm mov eax,[GlobalVar] end;
Toutefois, ce code fonctionne correctement (comme prévu) sur Windows, macOS 64 bits (Intel) et macOS 64 bits (ARM) uniquement si la variable globale est déclarée dans la MEME unité que la routine ASM. Si GlobalVar réside dans une autre unité, GetGlobalVar se comporte alors différemment sur Windows et macOS :
- Sur Windows, GetGlobalVar renvoie la VALEUR de GlobalVar (comme prévu).
- Sur OSX, GetGlobalVar renvoie l'ADRESSE de GlobalVar (cela peut avoir des conséquences problématiques).
Pour accéder à une variable globale, nous vous conseillons ceci :
function GetGlobalVar: UInt32; begin asm MOV EAX, [EBX].OFFSET GlobalVar MOV EAX, [EAX] end; end;
La clause 'begin' initiale est nécessaire pour configurer le code de prologue PIC requis qui configure EBX pour cette opération.
Les bibliothèques Windows sont seulement disponibles pour les applications Windows
Souvenez-vous de ces différences :
- Une application macOS 64 bits (Intel) ou macOS 64 bits (ARM) peut appeler des API FireMonkey ou des API POSIX.
- Une application macOS 64 bits (Intel) ou macOS 64 bits (ARM) ne peut pas appeler des API Windows (32 bits ou 64 bits).
- Une application Windows peut être activée pour appeler les API Windows 32 bits ou les API Windows 64 bits.
Equivalence des extensions de fichiers sur le Mac et Windows
Extension de fichier Mac | Extension de fichier Windows |
---|---|
.o (fichier objet) |
.obj (fichier objet) |
.dylib (bibliothèque dynamique) |
.dll (bibliothèque de liaison dynamique) |
Equivalence des éléments de ligne de commande sur le Mac et Windows
Elément | Sur le Mac | Sur Windows |
---|---|---|
Interface de ligne de commande |
Fenêtre Terminal Apple (basée sur UNIX) |
Fenêtre cmd (Démarrer | cmd) |
Invite de commande |
> Pour référencer le répertoire en cours, démarrez votre commande par |
> |
Commande liste de répertoires |
ls |
dir |
Commande changement de répertoire |
|
|
Séparateur de nom de fichier |
/ |
\ |
Voir aussi
- Gestion des exceptions (Delphi)
- Gestion des exceptions dans C++Builder
- Gestion des messages Windows (dans le Guide du concepteur de composants)
- Considérations Delphi pour les applications multi-périphériques
- Considérations C++ pour les applications multi-périphériques
- macOS Command Line 101 (EN)
- Développement des applications multi-périphériques