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

C++/CLI Discussion :

[COM InterOp][.NET/VB6] Comment est géré wrapper de wrapper?


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut [COM InterOp][.NET/VB6] Comment est géré wrapper de wrapper?
    Salut !

    J'ai une appli VB6 qui communique avec une DLL .NET.
    L'appli VB6 voit la DLL .NET en tant que composant COM.

    La DLL contient :
    - classe A
    - classe B
    La classe A contient une méthode "faireOperation" qui prend en argument une instance de la classe B.
    Côté VB, je fais donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim a as new A
    Dim b as new B
    a.faireOperation(b)
    A la ligne 1, VB crée un wrapper sur l'instance de la classe A.
    A la ligne 2, VB crée un wrapper sur l'instance de la classe B.
    A la ligne 3, il passe au wrapper de "a" le wrapper de "b".
    Ma question est:
    Lors de l'éxécution dans la CLR de la méthode "faireOperation", dotNet va-t-il voir b comme:
    1/ un wrapper d'une instance de B ?
    2/ un wrapper de wrapper d'une instance de B ?
    3/ une instance de B ? (Il faudrait alors qu'il soit carrément intelligent !)

    En fonction de la réponse (par exemple si c'est la 1 ou la 2), je vais modifier ma méthode faireOperation pour éviter la perte de perfs due aux wrappers (par exemple en gérant côté .NET une liste statique des instances de B, et en ne faisant communiquer VB avec .NET qu'avec des ids d'instance).

    Merci d'avance aux gens qui seront assez pointus pour pouvoir me répondre, voire me donner une idée sur la façon de tester ça ! ;-)

    @+

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    normalement comme une instance de B

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut
    Ok, merci ! C'est déjà une bonne nouvelle !

    Mais sais-tu où trouver la confirmation de cela ? Histoire de pouvoir me justifier face mes collègues... J'ai rien trouvé dans les docs (<ironie> faut dire qu'elles sont tellement bien faites </ironie> )

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par jyl2002
    Ok, merci ! C'est déjà une bonne nouvelle !

    Mais sais-tu où trouver la confirmation de cela ? Histoire de pouvoir me justifier face mes collègues... J'ai rien trouvé dans les docs (<ironie> faut dire qu'elles sont tellement bien faites </ironie> )
    Faut peut être fouillé un peu
    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconadvancedcominterop.asp
    :

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut
    Hé bien mes chers amis ce n'est pas faute d'avoir fouillé !

    Et à la lecture de la doc sur les wrappers COM, je n'ai toujours pas trouvé d'argument pour pouvoir affirmer que .NET arrive à faire le mapping entre CCW et RCW : mon code VB expose à ma méthode .NET un objet qu'il connait lui-même en tant qu'objet COM => comment être sûr que ma méthode .NET va bien recevoir l'objet en tant qu'objet .NET et non en tant qu'objet COM ?

  6. #6
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Parce que le Wrapper fonctionne sur le même principe que DCOM.
    Dès lors à l'instanciation de b par VB6 il va récupérer une représentation de l'interface INew de l'objet b effectivement créé dans DotNet, et c'est cette représentation qu'il va renvoyer dans a.faireOperation(b). Or cette représentation est directement la référence INew de l'objet b.

    Le seul truc qui peut être un peu tordu dans ce type d'architecture c'est que tu vas créer deux références COM qu'il faudra détruire, aussi faut il voir s'il n'y a pas intérêt à inclure a dans b.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut
    Ok. Merci bien pour l'info !

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

Discussions similaires

  1. WCF Com Interop via VB6
    Par Dnx dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 09/07/2012, 09h47
  2. [C#] Comment deployer un COM Interop ?
    Par loverdose dans le forum C#
    Réponses: 12
    Dernier message: 27/04/2012, 12h01
  3. Asp.net & Com+ ecrite en VB6
    Par kaygee dans le forum ASP.NET
    Réponses: 0
    Dernier message: 27/02/2009, 14h52
  4. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12
  5. Comment est financé developpez.com ?
    Par BuG dans le forum Evolutions du club
    Réponses: 9
    Dernier message: 19/06/2003, 11h03

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