Есть ли у объекта ATL COM насос сообщений? - PullRequest
3 голосов
/ 29 октября 2009

Если вы создадите новый проект ATL и добавите в него простой COM-объект (примечание: объект, а не элемент управления), использующий модель потоков в квартире, будет ли работать насос сообщений под капотом? Я хочу создать скрытое окно, которое является членом моего класса COM-объектов, но я не уверен, будут ли ему доставлены какие-либо сообщения или нет. Это происходит за кулисами или имеет значение, какое приложение на самом деле создает COM-объект?

Ответы [ 2 ]

4 голосов
/ 29 октября 2009

Нет, COM-объект ATL по умолчанию не использует обработчик сообщений. Ваш код должен явно использоваться через обычную библиотеку Windowing или явную реализацию сообщений.

0 голосов
/ 06 ноября 2009

COM использует насос сообщений под капотом для связи с вашим COM-объектом, когда это необходимо, если ваш COM-объект живет в квартире. Вот как методы безопасно вызываются для вашего объекта (путем сериализации в очереди сообщений) при вызове объектом в другой квартире (STA или MTA).

Вы не можете добраться до рассылки сообщений - COM собирает ее для вас только тогда, когда это необходимо. При отладке вы заметите, что вы вызываете методы для вашего объекта напрямую - вы не перепрыгиваете через насос сообщений. Конечно, это было бы так, если бы вы собирали несколько объектов, которые живут в разных квартирах.

Если вам нужно окно, вы можете создать его, используя стандартные методы. ATL предоставляет простые классы окон, такие как CWindow и CWindowImpl, которые могут упростить это.

...