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);