IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi .NET Discussion :

[D2005] Type Variant en .NET [FAQ]


Sujet :

Delphi .NET

  1. #1
    Membre éprouvé
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Par défaut [D2005] Type Variant en .NET
    Bonjour,

    Juste une question toute bete : comment faire dans un projet delphi .NET si on a besoin d'une variable de type 'variant' ?

    En effet si on fait on recoit une erreur :
    [Erreur] Menu.pas(97): E2003 Identificateur non déclaré : 'Variant'
    Merci,

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2005
    Messages : 3
    Par défaut
    C'est assez simple.

    Il faut que tu mettes variants dans le uses.

  3. #3
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Non, ça ne suffit pas. Il me semble qu'il est impossible d'utiliser le type Variant en .NET : c'est trop risqué
    Pour être sûr, je te conseille tout de lire http://laurent-dardenne.developpez.c...eDelphiDotNet/
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Membre émérite
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Par défaut
    En effet c'est plus possible, ça ne rentre pas dans la politique de sûreté des applications .NET
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  5. #5
    Membre éprouvé
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Par défaut
    En utilisant des fiches VCL (projet VCL .NET dans delphi 2005) on peux encore utiliser des variants et la pluspart des compos W32, ouf.

    Par contre je me demande comment on va faire pour tout ce qui est lien OLE, ainsi que pour les WebServices ?

    Pour les liens OLE on utilisait une variant, pour les webservices je sais pas, mais la meme methode semble donner des resultats (je teste encore).

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    effectivement le type variant est implémenté sous Delphi .NET en tant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type
      Variant = type TObject;
      OleVariant = type TObject;
    Il sont donc reconnus et ne génére pas de code unsafe, voir PEVerify.

    Extrait de la doc Delphi 2005
    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 .
    A savoir : le type Currency n'est pas un type de la CLR mais il est simulé dans la VCl pour le portage (dixit Olivier Dahan dans Delphi 8 pour .NET). Avec un Risque de bug.

    Tous les types sous .NET sont des objets et on peut connaître dynamiquement leur type, Ma Variable.GetType.
    Confirmation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class function VariantHelper.VarType(const AObject: TObject): TVarType;
    begin
      if AObject = nil then
        Result := varEmpty
      else
        Result := VarType(AObject.GetType);
    end;
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     VariantHelper = class helper for Variant
    Le C# ne propose pas le type variant.

    Pour enfoncer le clou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Messages d'erreur de référence de Visual Basic   
     
    'Variant' n'est plus un type pris en charge ; utilisez le type 'Object' à la placeVoir aussi
    Object, type de données
    ['Variant' is no longer a supported type; use the 'Object' type instead]
     
    Le type de données Object remplace Variant.
     
    Pour corriger cette erreur 
     
    Déclarez l'élément en tant que Object.

    A mon avis il est préférable d'éviter les variant en modifiant la maniére de coder sous .NET.

Discussions similaires

  1. Problème avec le type variant
    Par fabrice001 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/12/2005, 10h18
  2. locate - type variant incorrect
    Par lol_adele dans le forum Bases de données
    Réponses: 8
    Dernier message: 24/10/2005, 15h54
  3. [D2005] Formation Delphi 2005 .NET
    Par Promeneur dans le forum Delphi .NET
    Réponses: 3
    Dernier message: 02/09/2005, 10h28
  4. [D2005] Utiliser un assemblage .Net
    Par giloutho dans le forum Delphi .NET
    Réponses: 7
    Dernier message: 27/07/2005, 00h31
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo