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 :

Communication entre composants COM


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par d�faut Communication entre composants COM
    Bonjour,

    Comment faire communiquer deux composants COM natifs dans un application c#, sachant que ces composants cr�ent chacun des threads?
    J'arrive � acc�der � chacun des composants depuis l'application pour envoyer des donner. Mais je n'arrive pas � envoyer des donn�es re�ues du composant COM 1 au composant COM 2.
    Les composants sont cr��s dans le thread d'interface t1 qui est en STA (a cause de wpf).
    Le composant COM 1 (MTA) g�n�re des donn�es dans un thread 2 et doit les envoyer au composant COM 2 (MTA).
    Y a t il une architecture type � respecter?
    Merci pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par d�faut
    j'ai pu m'en sortir en utilisant un thread qui cr�e les deux composants COM plus une fen�tre fant�me pour utiliser sa pompe � message.

    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
     
            public void Start()
            {
                Thread t1 = new Thread(new ThreadStart(DispatcherThread));
                t1.SetApartmentState(ApartmentState.STA);
                t1.IsBackground = true;
                t1.Start();
            }
     
            public void DispatcherThread()
            {
               // création des objects COM
               // ...
     
               // création de la fenêtre fantôme qui dérive de Window
                GhostWindow.GhostInstance = new GhostWindow();
               // mettre en route la pompe à message
                System.Windows.Threading.Dispatcher.Run();
            }
    Quand je veux faire communiquer mes composants alors qu'ils ont cr�� en interne des threads diff�rents, j'utilise le dispatcher de ma fenetre fantome

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void DoJobCallback(object sender, object obj1)
            {
                if (sender != null)
                {
                    // transfer through the dispatcher
                    GhostWindow.GhostInstance.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (MyDelegate)DoJobCallback, null, obj1);
                    return;
                }
                // Do the job here
                // ...
            }
    Il n'en reste pas moins que sur les deux composants COM, l'un s'utilise facilement depuis n'importe quel thread, tandis que l'autre me fait une exception
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
     The call to QI for interface 'SCANNINGMODULELib.IScanningEngine' with IID '{53B1F314-E4DA-496B-880E-7C5E35AD735C}' failed with HRESULT 0x80004002 (No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))). One likely reason this failed is that the object does not have a proxy/stub dll properly registered
    si je ne passe pas par mon thread avec la pompe � message.
    Je ne comprends pas ce qui les diff�rencie.

  3. #3
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut
    Salut.

    J'ai le m�me souci que toi. Impossible d'utiliser un composant COM dans un thread autre que celui dans lequel il a �t� cr�� (des histoires de MTA/STA) semble-t-il. Et bien sur pour le gui pas moyen de se passer de STA. Alors que COM c'est majoritairement du MTA. J'ai entendu parl� des "PointerMarshallingStreamMachinBidule", mais pas d'exemple vraiment utilisable et compr�hensible.

    C'est assez rageant de devoir trouver des bidouilles � deux balles pour contourner le probl�me...

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par d�faut
    Je me suis int�ress� de plus pr�t aux composants COM que j'utilisais. Car un des deux ne me posait pas de probl�me, il �tait accessible depuis n'importe quel thread. J'ai �tudi� leurs diff�rences et il se trouve qu'en comblant une d'entre elles j'ai trouv� la solution.
    Dans le fichier .idl il fallait sp�cifier les interfaces comme �tant "dual".
    Je n'ai pas trouv� vraiment d'article m'expliquant pourquoi. Si quelqu'un connait qu'il n'h�site pas � partager

  5. #5
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut
    Bonjour.

    Merci pour l'info.

    J'ai voulu tester, mais difficile encore pour moi de faire passer mes interfaces sous IDispatch, il me manque des connaissances en la mati�re et surtout le code d'impl�mentation.

Discussions similaires

  1. Probl�me de compatibilit� entre composant COM et 64 bits
    Par Raymonde dans le forum G�n�ral Dotnet
    R�ponses: 6
    Dernier message: 17/09/2012, 18h05
  2. R�ponses: 1
    Dernier message: 18/01/2008, 13h17
  3. [COM | VB] communication entre application hétérogène
    Par zlavock dans le forum G�n�ral Java
    R�ponses: 8
    Dernier message: 21/11/2004, 10h51
  4. Composants communs entre Ver Entreprise et Professionnelle
    Par bakaneko dans le forum C++Builder
    R�ponses: 2
    Dernier message: 22/03/2004, 13h07

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