ATL COM对象是否有消息泵?

时间:2009-10-29 19:54:07

标签: c++ com atl

如果您创建一个新的ATL项目并向其添加一个简单的COM对象(注意:一个对象而不是一个控件),它使用了公寓线程模型,那么是否会有一个消息泵在引擎盖下运行?我想创建一个隐藏窗口,它是我的COM对象类的成员,但我不确定是否会实际传递任何消息。这是在幕后处理还是实际创建COM对象的应用程序是否重要?

2 个答案:

答案 0 :(得分:4)

不,默认情况下,ATL COM对象不实现消息泵。您的代码必须通过普通的Windowing库或显式消息泵实现显式使用。

答案 1 :(得分:0)

如果COM对象位于公寓中,则COM会在必要时使用消息泵来与COM对象进行通信。这就是在被另一个公寓(STA或MTA)中的对象调用时,如何在对象上安全地调用方法(通过由消息队列序列化)。

你无法获得消息泵 - 只有在需要时才将COM放在一起。您会注意到在调试时直接调用对象上的方法 - 您没有跳过消息泵。当然,如果你把多个住在不同公寓的物品放在一起,你就会成为现实。

如果您需要一个窗口,可以使用标准方法创建一个窗口。 ATL提供了简单的窗口类,如CWindow和CWindowImpl,可以使这更容易。