Migration du code Delphi en mobile depuis le bureau
Remonter à Considérations Delphi pour les applications multi-périphériques
Sommaire
Cette rubrique décrit comment migrer du code Delphi existant pour utiliser les compilateurs mobiles Delphi :
- DCCIOS32.EXE, le compilateur Delphi pour le simulateur iOS
- DCCIOSARM.EXE, le compilateur Delphi pour le périphérique iOS 32 bits
- DCCIOSARM64.EXE, le compilateur Delphi pour le périphérique iOS 64 bits
- DCCAARM.EXE, le compilateur Delphi pour Android, DCCAARM64.EXE, le compilateur Delphi pour Android 64 bits
Mise à jour des types tableau
Effectuez la mise à jour de toutes les déclarations de tableaux afin de les rendre dynamiques.
Utilisez l'une des syntaxes suivantes :
var x: array of Integer;
x: TArray<Integer>;
Il existe des cas où une structure (enregistrement) doit être transmise à une fonction externe et qu'elle contient un tableau déclaré avec une longueur spécifique. C'est particulièrement vrai pour les tableaux de caractères déclarés "in-situ" à l'intérieur de la structure. Dans ce cas, et seulement dans ce cas, ce qui suit est autorisé :
type
rec = record
Flags: Integer;
Chars: array[MAX_PATH] of Char;
end;
Dans les cas où une fonction externe prend un tableau directement, utilisez à la place un tableau dynamique. Pour les tableaux de caractères UTF8 :
- Pour convertir depuis UTF8, utilisez TBytes avec System.SysUtils.TEncoding.GetString(Bytes).
- Pour convertir en UTF8, utilisez TBytes avec System.SysUtils.TEncoding.GetBytes(S).
Utiliser un appel de fonction dans un bloc try-except pour empêcher les exceptions matérielles non interceptées
Avec le compilateur pour les périphériques iOS, les blocsexcept
peuvent intercepter une exception matérielle uniquement si le bloctry
contient une méthode ou un appel de fonction. Le back-end LLVM du compilateur est légèrement différent dans la mesure où il ne peut pas effectuer de retour si aucune méthode/fonction n'est appelée dans le bloctry
.
Ainsi, voici comment structurer un bloc try-except
capable d'intercepter une exception matérielle :
var
P: ^Integer = nil;
procedure G1;
begin
P^ := 42;
end;
begin
try
G1;
except
writeln('Catch:G1 - pass');
end;
end.
Même si un bloc de code source semble contenir un appel de fonction, cela peut ne pas être le cas si la fonction est une fonction inlined. Au moment où LLVM génère des instructions machine, le processus inline a déjà eu lieu et il n'existe plus d'appel de fonction dans le bloc try.
Utiliser les intrinsèques atomiques au lieu du langage assembleur
Les compilateurs mobiles Delphi ne supportent pas un assembleur intégré. Si vous avez besoin d'échanger, de comparer-et-d'échanger, d'incrémenter et de décrémenter atomiquement des valeurs en mémoire, vous pouvez utiliser les nouvelles fonctions intrinsèques atomiques.
Les opérations atomiques sont utilisées pour implémenter des primitives de verrouillage multithreads et fournir les primitives nécessaires à l'implémentation de structures "exemptes de verrou". Les types d'opérations nécessaires sont implémentés en tant que fonctions standard ou fonctions "intrinsèques".
Dans une application multiplate-forme, les intrinsèques atomiques peuvent être utilisés dans {$IFDEF} pour la conditional AUTOREFCOUNT ou NEXTGEN..
Fonctions intrinsèques atomiques
Voici les fonctions intrinsèques atomiques supportées par les compilateurs mobiles Delphi :
Comptage automatique des références
Les compilateurs mobiles Delphi (DCCIOS32, DCCIOS32ARM et DCCAARM) utilisent le comptage automatique des références (ARC) pour les classes, un schéma de comptage de références qui est différent du schéma utilisé par les compilateurs de bureau Delphi (DCC32, DCC64 et DCCOSX). Toutefois, tous les compilateurs Delphi prennent en charge ARC pour les interfaces, les chaînes et les tableaux dynamiques. En réalité, les compilateurs mobiles Delphi étendent simplement ARC aux classes. ARC inclut la disposition et la gestion de mémoire automatiques.
- Remarque : Pour les compilateurs Delphi qui prennent en charge ARC, les instances d'objet qui font référence les unes aux autres peuvent effectivement verrouiller la mémoire sans que l'une des références soit marquée avec l'attribut de référence faible.
Pour de plus amples informations sur ARC et les références faibles, voir :
Voir aussi
- DCCIOSARM.EXE, le compilateur Delphi pour le périphérique iOS 32 bits
- DCCIOSARM64.EXE, le compilateur Delphi pour le périphérique iOS 64 bits
- DCCAARM.EXE, le compilateur Delphi pour Android
- DCCAARM64.EXE, le compilateur Delphi pour Android 64 bits
- Tutoriels mobiles : Développement d'applications mobiles (iOS et Android)
- Extraits de code mobile
- System.SysUtils.TStringHelper
- System.SysUtils.TStringBuilder
- Chaînes basées sur zéro (directive du compilateur Delphi)
- Migration du code C++ en mobile depuis le bureau