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

MFC Discussion :

en COM Tableaux de pointeurs d'interface:


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 5
    Points
    5
    Par défaut en COM Tableaux de pointeurs d'interface:
    Bonjour à tous,
    mon problème est simple. J'utilise les objets COM d'un logiciel et celui-ci me propose comme variable de sortie d'une fonction un tableaux de pointeurs d'une interface particulières que j'appelerai IInterface.
    Pour la déclaration j'écris qqch du style:
    IInterface** variable=new IInterface*[taille] //je connais la variable taille
    mafonction(variable)

    Visual C++ compile certe mais où et comment je dois utilser le AddRef (et aussi release) qui est si j'ai bien compris obligatoire. Jusqu'à maintenant, j'utilisais CComPtr dés que je sollicitais une interface mais là j'ai rien trouver d'équivalent pour un tableaux de pointeurs.

    Donc si qqun a une idée, je le remercie d'avance.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Tu peux créer un tableau de CComPtr à partir du tableau reçu (simple boucle).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    c'est à dire faire qqch du style

    IInterface** variable=new IInterface*[taille]
    mafonction(variable)
    for(int i=0, i<taillle,i++)
    {
    CComPtr<IInterface> intermediaire=variable[i];
    ...
    }


    J'avoue ne être qu'un débutant en COM et si j'utilise les CComPtr, c'est parce qu'ils m'évitaient de me poser trop de questions. Sauf que là, j'arrive pas à faire marcher ma fonction bien que le code compile. Je veux être sûr que je manipule correctement les tableaux avant d'incriminer la fonction en elle-même.

    Edit: dernier petit up avant que jerédige mon rapport, je remercie au passage tous ceux qui prennent le temps de lire pour voir s'ils peuvent apporter leur aide.

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Qu'est-ce que AddRef vient faire ici ?

    AddRef on n'y touche pas c'est l'OS qui joue dessus lors du chargement du module COM en mémoire ( exe ou dll )

    Je doute qu'un objet COM puisse retourner un tableau de pointeur.
    Comment je vais utiliser ton objet COM sous Delphi ou Visual Basic ???
    Or les objets COM c'est justement pour assurer une interopérabilité entre les langages de programmation ( c'est en quelque sorte l'ancêtre de NET )

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Disons que lorsque j'utilisais pas les CComPtr, j'avais lu que dés qu'on faisait appelle à une interface il fallait appeler la méthode Addref. Or ici pour créer mon tableaux, je n'ai pas trouver de template ATL permettant de le faire. Je me suis donc dis que si je n'arrivais pas à faire marcher la fonction c'est parce que je ne respecte pas une règle imposée par COM.

    Sinon il te semble étrange que ma fonction COM puisse renvoyer un tableaux de pointeurs. Car ma pauvre expérience me permet pas de faire ce genre de constat mais je soupconne de plus en plus que pour certaines fonctions, les developpeurs du logiciel n'ont pas respécté toutes les règles de la technologie COM d'où mes problèmes.

  6. #6
    mat.M
    Invité(e)
    Par défaut
    eh bien oui cela me semble étrange car tu pourras utiliser cet objet COM en C++ mais difficilement avec d'autres langages de programmation.

    Pourquoi veux-tu passer un tableau de pointeur ?
    le risque de plantages est accru , c'est pas possible d'encapsuler cela ?
    COM a été crée par M$ justement pour faire des objets , briques logicielles indépendantes, exactement de manière analogue aux méchanismes de POO.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Les tableaux en COM c'est avec SAFEARRAY.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Disons que j'ai une aide très imprécise, dés fois l'aide parle de SafeArray parfois juste de "array of pointers".

    Mais si c'est par exemple des Safearrays, seulement certains types sont disponibles à ma connaissance ceux qu'en fait Microsoft a défini (long, int, dispatch...). Or il me parle parfois de Safearray de mon interface.

    Donc peut-être il y a moyen de rajouter des interfaces autres que IUnknown et IDispatch mais j'avoue ne pas avoir trouver comment.

    La seule qui est sûre est que ce code compile, mais je peux ensuite lire uniquement la première valeur du tableaux.
    IInterface** variable=new IInterface*[taille]
    mafonction(variable)

    C'est de la cuisine maison et le cher éditeur de mon logiciel a oublié de me prévenir, dois-je le comprendre comme cela. Sinon pourquoi utiliser ces fonctions, bah disons que je souhaite accéder à des informations de leur format de fichier et leur aide me dise d'utiliser alors ces fonctions.

  9. #9
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Points : 138
    Points
    138
    Par défaut
    Salut, sache sue ton interface hérite soit de IDispatch soit de IUnknown, donc tu peux utiliser les safearray et c'est très utilisé quand tu as des tableaux à passer à des objets COM.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Euh sans vouloir abuser, tu voudrais un peu plus détaillé car j'ai pas à réussi à trouver ce dont tu parlais.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Tu te demandes:
    Donc peut-être il y a moyen de rajouter des interfaces autres que IUnknown et IDispatch mais j'avoue ne pas avoir trouver comment.
    Mais toute interface COM hérite de IUnknown, donc il te dit que tu peux passer tes interfaces à toi en tant que IUnknown vue qu'elle supportent cette interface.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Merci je vais m'empresse d'essayer.

Discussions similaires

  1. Pointeur d'interface COM
    Par pompomthebest dans le forum WinDev
    Réponses: 4
    Dernier message: 13/03/2008, 11h37
  2. Problème avec les tableaux de pointeurs
    Par TheDoci dans le forum C
    Réponses: 2
    Dernier message: 07/01/2007, 13h04
  3. allocation dynamique et tableaux de pointeurs
    Par gbardy dans le forum 4D
    Réponses: 3
    Dernier message: 06/07/2006, 11h08
  4. interface COM / manipulation de pointeurs
    Par slylafone dans le forum C++
    Réponses: 2
    Dernier message: 06/03/2006, 20h12
  5. [PORT COM] RS485 et pointeur null...
    Par floanne dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/02/2006, 11h00

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