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 Discussion :

différence typage objet Delphi /VB


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 163
    Points
    163
    Par défaut différence typage objet Delphi /VB
    Bonjour,

    voila je suis débutant en Delphi et en VB, et je dois utiliser un objet com pour lesquels j'ai des exemples en VB que je souhaite convertir en Delphi.

    En VB j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ObjetClient As IBOClient3
    ObjetClient = BaseCpta.FactoryClient.Create
    En VB le create me renvoie un objet IBIPersistObject qui n'est donc pas du type IBOClient3, mais pourtant ça marche.

    En Delphi, l'équivalent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ObjetClient : IBOClient3;
    ObjetClient := BaseCpta.FactoryClient.Create;
    et la Delphi me dit ce qui est logique :
    Types incompatibles : IBOClient3 et IBIPersistObject


    Pourquoi VB l'accepte alors qu'on a déclaré le bon typet pas Delphi ?

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    est-ce que ceci fonctionne ?
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ObjetClient : IBOClient3;
    ObjetClient := BaseCpta.FactoryClient.Create as IBOClient3;

    c'est à dire de demander à l'objet retourné l'interface attendue
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 163
    Points
    163
    Par défaut
    Ouaah, merci ça marche, encore un truc de plus que j'ai appris. Je suis des tutoriels mais je n'était pas encore arrivé là !

  4. #4
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    est-ce que ceci fonctionne ?
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ObjetClient : IBOClient3;
    ObjetClient := BaseCpta.FactoryClient.Create as IBOClient3;

    c'est à dire de demander à l'objet retourné l'interface attendue
    Juste par curiosité, quelle est la (les) différence avec:

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ObjetClient : IBOClient3;
    ObjetClient := IBOClient3(BaseCpta.FactoryClient.Create);

    Merci.

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par peter27x Voir le message
    Juste par curiosité, quelle est la (les) différence avec:

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ObjetClient : IBOClient3;
    ObjetClient := IBOClient3(BaseCpta.FactoryClient.Create);

    Merci.
    Dans le premier cas tu invoques (enfin Delphi le fait pour toi) IUnknown.QueryInterface, dans le second cas tu indiques à Delphi que ce qu'il pense être un type en est en réalité un autre.

    voici un code qui met cela en valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    type
      Interface1 = Interface
      ['{6C723D5D-FE43-4C50-B0B2-777E73CAF16D}']
        procedure test;
      end;
     
      Objet1 = class(TInterfacedObject, Interface1)
        procedure Test;
      end;
     
    procedure Objet1.Test;
    begin
      ShowMessage('Test');
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      o1 : Objet1;
      un : IUnknown;
      i1 : Interface1;
    begin
      o1 := Objet1.Create;
      un := o1;
      i1 := un as Interface1;
      i1.Test; // "Test"
      i1 := Interface1(un);
      i1.Test; // plantage EAccessViolation à l'adresse 1
    end;
    l'access violation montre bien qu'on cherche à lire l'adresse de la première fonction de l'interface alors qu'elle n'existe pas car contrairement à ce qu'on dit à Delphi, "un" n'implémente pas Interface1
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    l'access violation montre bien qu'on cherche à lire l'adresse de la première fonction de l'interface alors qu'elle n'existe pas car contrairement à ce qu'on dit à Delphi, "un" n'implémente pas Interface1
    OK, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mission/Télétravail] Développeur objet (Delphi, C++, VB) / Access
    Par Mirande dans le forum Demandes
    Réponses: 0
    Dernier message: 25/07/2010, 13h53
  2. Petit point de détail objet Delphi
    Par peter27x dans le forum Débuter
    Réponses: 6
    Dernier message: 24/12/2008, 10h14
  3. [POO] obtenir typage objet
    Par taffMan dans le forum Langage
    Réponses: 3
    Dernier message: 28/09/2006, 14h13
  4. Cherche equivalent a l'inspecteur d'objet Delphi
    Par LeBigornot dans le forum Composants VCL
    Réponses: 3
    Dernier message: 09/11/2004, 13h27

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