Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top