Question

Si vous créez un nouveau projet ATL et y ajoutez un objet COM simple (remarque: un objet et non un contrôle) qui utilise le modèle de threading Apartment, y aura-t-il une pompe à message fonctionnant sous le capot? Je souhaite créer une fenêtre masquée qui est un membre de ma classe d'objets COM, mais je ne suis pas sûr que des messages lui soient réellement livrés ou non. Est-ce que cela est géré en arrière-plan ou quel type d’application crée réellement l’objet COM?

Était-ce utile?

La solution

Non, un objet COM ATL n'implémente pas de pompe de messages par défaut. Votre code doit utiliser explicitement on via une bibliothèque Windowing normale ou une implémentation explicite de pompe de messages.

Autres conseils

COM utilise une pompe à message sous le capot pour communiquer avec votre objet COM lorsque cela est nécessaire, si votre objet COM habite dans un appartement. C'est ainsi que les méthodes sont appelées en toute sécurité sur votre objet (en étant sérialisées par la file de messages) lorsqu'elles sont appelées par un objet situé dans un autre appartement (STA ou le MTA).

Vous ne pouvez pas accéder à la pompe à message - COM l’assemble pour vous uniquement lorsque cela est nécessaire. Lors du débogage, vous remarquerez que vous appelez directement les méthodes sur votre objet - vous ne sautez pas dans une pompe de message. Vous le seriez bien sûr si vous assembliez plusieurs objets qui vivent dans des appartements différents.

Si vous avez besoin d'une fenêtre, vous pouvez en créer une en utilisant des méthodes standard. ATL fournit des classes Windows simples telles que CWindow et CWindowImpl, ce qui peut faciliter les choses.

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