Migration des variants
Le type Variant est très différent dans Delphi 2005. Alors que le compilateur Win32 mappe Variant sur le type d'enregistrement utilisé par COM pour les variants, dans Delphi 2005, un variant est plus général. N'importe quel objet (c'est-à-dire dans Delphi 2005 n'importe quel type) peut agir et être manipulé comme variant. Par conséquent, dans Delphi 2005, vous pouvez affecter un contrôle à un variant.
Le type Delphi Variant est une notion du langage Delphi qui n'est pas compatible CLS. Si vous écrivez dans Delphi 2005 du code utilisant des variants, pour le monde extérieur, ceux-ci seront uniquement mappés comme System. Object . Ainsi, pour le code écrit dans d'autres langages, la souplesse dans les conversions de types offerte par la prise en charge des variants Delphi n'est pas disponible.
Modifications de TVarRec
Si votre code utilise des variants, il est probable qu'il continuera à fonctionner. Toutefois, comme les variants ne sont plus basés sur le type TVarRec, tout code fonctionnant avec les structures internes d'un variant Win32 en pénétrant dans l'enregistrement TVarRec sous-jacent doit être réécrit pour .NET.
Remarque: Presque toutes les fonctions fournies par l'unité Variants sont implémentées dans Delphi 2005. Si vous avez besoin d'obtenir le VarType d'un variant, vous pouvez l'obtenir et conserver quand même un code portable.
Modifications des variants OLE
La couche COM Interop marshale automatiquement les Objects (et donc les variants). Vous pouvez donc utiliser les variants Delphi 2005 avec COM. Toutefois, lors de l'utilisation des variants Delphi 2005 avec COM, vous devrez restreindre les types affectés au variant aux seuls types compatibles COM.
Dans Delphi pour Win32, le compilateur impose des restrictions COM sur les genres de données qu'il est possible d'affecter à un OleVariant. Dans Delphi 2005, OleVariant est simplement un synonyme de Variant. Il n'entreprend aucune action pour garantir que la valeur Variant est d'un type compatible COM.
Modifications des variants personnalisés
Les variants personnalisés sont totalement différents dans Delphi 2005. Comme les variants ne sont que des objets, il n'est pas nécessaire de faire quoi que ce soit pour créer un variant personnalisé – toute classe que vous définissez est déjà un type Variant. Toutefois, pour fonctionner correctement avec un variant personnalisé, l'implémentation de quelques interfaces CLR peut être utile : IComparable, IConvertible et ICloneable. Le compilateur Delphi peut utiliser ces interfaces pour implémenter des opérations de Variant. Toutefois, même avec ces interfaces, d'autres types Variant arbitraires ne peuvent pas être convertis dans votre (classe) Variant si vous n'implémentez pas une méthode FromObject :
class function FromObject(AObject: System.Object): TObject; static;
FromObject prend un objet source arbitraire (le variant à convertir dans votre type de classe) et renvoie l'instance correspondante de votre classe sous forme de TObject .
Partager