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 :

[COM] Interface refusée dans un activeX


Sujet :

MFC

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Points : 145
    Points
    145
    Par défaut [COM] Interface refusée dans un activeX
    Bonjour à tous,

    j'ai crée une DLL avec VC++ 6 qui implémente un objet, et cet objet appel des méthodes via COM.
    Pour préciser, disons que cet objet s'appelle ObjetA, et que la fonction qui m'intéresse s'appelle MethodeComObjetA.

    Premier contexte : la DLL fonctionne parfaitement quand je l'utilise dans mon logiciel d'édition :

    Logiciel d'édition (Virtools)-->DLL-->ObjetA--> MethodeComObjetA

    Mon logiciel se lance, charge la DLL, instance ObjetA, initialize COM puis appelle MethodeComObjetA.
    Tout baigne

    Second contexte, j'utilise cette DLL dans un activeX et ça marche aussi

    Iexplorer-->ComposantActiveX (VirtoolsWebPlayer)-->DLL-->ObjetA-->MethodeComObjetA

    InternetExplorer se lance, mon composant active X se charge, charge la DLL, instancie ObjetA, initialise COM puis appelle MethodeComObjetA.
    Tout baigne encore une fois.

    :Mon problème apparait dans le même contexte d'execution mais avec un autre type d'appel.
    En effet, quand j'invoque la MethodeComObjetA à travers une fonction c++, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void fonctionAppel(pointeurSurObjetA){
     
    HRESULT hr= pointeurSurObjetA->MethodeComObjetA();
     
    }
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeObjetA * pointeurSurObjetA=&ObjetA;
    j'ai alors hr = 0x8001010E RPC_E_WRONG_THREAD
    "The application called an interface that was marshalled for a different thread."

    D'après mes recherches, il semblerait que Com refuse d'appeller MethodeComObjetA() car il considère que ce n'est plus le même thread.

    Comme je suis pas familier de DCOM, j'aimerais bien comprendre l'origine de ce problème, d'autant plus que dans le premier contexte ce type d'appel passe sans problème...

    PS : J'initialise COM avec hr = ::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Points : 145
    Points
    145
    Par défaut [Résolu]
    Pour corriger le problème, j'ai placé toute ma gestion COM dans la même méthode. Mais c'est pas très élégant, c'est le moins qu'on puisse dire

    J'aimerais donc déterminer par quel thread mes fonctions sont exécutées.

    : Existe t il un outil dans VC++6 qui me permette de le faire, en traquant les threads de mon projet par exemple ?

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

Discussions similaires

  1. Impossible de supprimer dans Ccleaner ActiveX/COM inexistant
    Par Un Internaute dans le forum Windows 7
    Réponses: 0
    Dernier message: 21/12/2014, 07h27
  2. Support de l'interface ICategorizeProperties dans composant ActiveX
    Par mattfr69 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/04/2014, 22h43
  3. [Virtual Pascal] [Win32] Objets COM - Interface IShellLink
    Par Alcatîz dans le forum Autres IDE
    Réponses: 5
    Dernier message: 27/10/2005, 21h19
  4. Taille du texte dans un ActiveX
    Par Audin'S dans le forum MFC
    Réponses: 1
    Dernier message: 27/05/2005, 13h43
  5. [Com] Interface IDispatch.Invoke
    Par Laurent Dardenne dans le forum Windows
    Réponses: 4
    Dernier message: 15/06/2004, 22h51

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