Différences entre Windows et Mac OS X
Remonter à Considérations pour les applications multi-périphériques
Quand vous commencez le développement multi-périphérique pour Mac OS X, vous devez comprendre et être capable de gérer de nombreux problèmes, notamment ceux décrits ci-dessous.
Sommaire
- 1 Gestion des exceptions différente
- 2 Différences d'alignement entre Mac et Windows
- 3 Accès aux variables globales dans ASM sur Windows et OS X
- 4 Les bibliothèques Windows sont seulement disponibles pour les applications Windows
- 5 Extensions de fichier équivalentes sur le Mac et Windows
- 6 Eléments de ligne de commande équivalents sur le Mac et Windows
- 7 Voir aussi
Gestion des exceptions différente
Les systèmes Mac et Linux utilisent des exceptions mappées - PC (Program Counter), alors que Windows (Win32) utilise des enregistrements de registre liés sur la pile.
Vous devez adapter votre gestion d'exceptions au type utilisé sur votre plate-forme cible. En particulier, il y a 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 la plate-forme Mac OS X, la gestion des exceptions structurée (__try/__except) n'est pas disponible. Pour de plus amples informations, voir Développement d'applications Mac OS X#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 sur la pile sur le 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 OS X)tchar.h
ne fonctionne pas sur un Mac
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 OS X
Sur OS X, 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, comme suit :
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 et OS X seulement 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 OS X :
- 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 Mac OS X peut appeler les API FireMonkey ou les API POSIX.
- Une application Mac OS X ne peut pas appeler les 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.
Extensions de fichier équivalentes 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) |
Eléments de ligne de commande équivalents 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
- Mac OS X Command Line 101
- Développement des applications multi-périphériques