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 arrive qu'une structure (un enregistrement) doive être transmise à une fonction externe et que cette structure contienne un tableau déclaré avec une longueur spécifique. C'est notamment le cas des 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 le périphérique iOS, les blocs except peuvent intercepter une exception matérielle uniquement si le bloc try contient un appel de méthode ou de fonction. Cette particularité est liée au backend LLVM du compilateur qui ne peut pas renvoyer d'exception 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 ne peut pas se produire si la fonction est une fonction inline. La raison principale est qu'au moment où le LLVM génère des instructions machine, le processus inline a déjà eu lieu et il n'y a plus d'appel de fonction dans le bloc try.

Utiliser les intrinsèques atomiques au lieu du langage assembleur

Les compilateurs Delphi mobiles ne prenant pas en charge d'assembleur intégré, vous pouvez utiliser les nouvelles fonctions intrinsèques atomiques pour échanger, comparer et échanger, incrémenter et décrémenter des valeurs en mémoire.

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} selon la plate-forme cible.

Fonctions intrinsèques atomiques

Voici les fonctions intrinsèques atomiques supportées par les compilateurs mobiles Delphi :

Voir aussi