Есть ли у объекта ATL COM насос сообщений?
Вопрос
Если вы создадите новый проект ATL и добавите в него простой COM-объект (примечание: объект, а не элемент управления), использующий модель потоков в квартире, будет ли запущен насос сообщений под капотом? Я хочу создать скрытое окно, которое является членом моего класса COM-объектов, но я не уверен, будут ли ему доставлены какие-либо сообщения или нет. Это обрабатывается за кулисами или имеет значение, какое приложение на самом деле создает COM-объект?
Решение
Нет, COM-объект ATL по умолчанию не использует обработчик сообщений. Ваш код должен явно использоваться через обычную библиотеку Windowing или явную реализацию сообщений. Р>
Другие советы
COM использует насос сообщений под капотом для связи с вашим COM-объектом, когда это необходимо, если ваш COM-объект живет в квартире. Вот как методы безопасно вызываются для вашего объекта (путем сериализации в очереди сообщений) при вызове объектом в другой квартире (STA или MTA). Р>
Вы не можете добраться до рассылки сообщений - COM собирает ее для вас только тогда, когда это необходимо. При отладке вы заметите, что вы вызываете методы для вашего объекта напрямую - вы не перепрыгиваете через насос сообщений. Конечно, это было бы так, если бы вы собирали несколько объектов, которые живут в разных квартирах.
Если вам нужно окно, вы можете создать его, используя стандартные методы. ATL предоставляет простые классы окон, такие как CWindow и CWindowImpl, которые могут упростить это.