Échantillon ATL de l'appel (Marshalling) Interfaces COM à thread d'appartements d'un fil de travail

StackOverflow https://stackoverflow.com/questions/5411927

Question

Je recherche un échantillon de code qui illustre la réalisation d'appels COM transversaux dans une DLL du serveur ATL COM. Connaissez un?

Plus de détails:

Mon composant est un objet d'assistant de navigateur IE qui doit travailler sur un thread d'arrière-plan. Dans l'une des méthodes de mon objet appelées à partir du fil principal d'IE, IE me donne un pointeur sur IE DOM (IHtmlWindow2) Et je le stocke dans une variable de membre local.

Maintenant, je veux créer un fil de travail qui peut appeler de manière asynchrone des méthodes sur ce pointeur d'interface com que je viens de stocker.

Si cela compte, mes appels se produiront après mon retour de la méthode où j'ai obtenu le pointeur d'interface de IE, donc IE (et non mon code) aura le contrôle lorsque j'essaierai de passer les appels à partir de mon fil de travail.

Mon composant et l'application hôte sont filetés par l'appartement.

Quelqu'un connaît un bon échantillon C ++ montrant comment cela se fait?

Je recherche spécifiquement un échantillon court et simple (et ne pas Juste un pointeur vers la documentation pertinente) parce que je lis cette question Et ses réponses et ont été intimidées par la quantité d'apprentissage que je devrais faire pour écrire une implémentation à partir de zéro. Chaque fois que quelqu'un recommande de lire un livre Don Box avant d'écrire du code, vous savez que vous êtes dans une longue nuit déroutante ... :-)

Était-ce utile?

La solution

C'est automatique dans COM, il s'occupe des exigences de l'appartement et gérera l'appel si le pointeur de l'interface a une affinité STA. Vous devez rassembler le pointeur de l'interface avant de l'utiliser dans le thread, ATL a les méthodes d'aide AtlMarshalPtRrinProc () et AtlunMarshalPtr () pour faciliter cela. ComARSHALInterthreadInterfaceInStream () ou IgloBalInterFacetable si vous voulez le faire vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top