Migration du code Delphi en mobile depuis le bureau

De RAD Studio
Aller à : navigation, rechercher

Remonter à Considérations Delphi pour les applications multi-périphériques


Cette rubrique décrit comment migrer du code Delphi existant pour utiliser les compilateurs mobiles Delphi :

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 :

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 blocs except peuvent intercepter une exception matérielle uniquement si le bloc try 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 bloc try.
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