Pregunta

Si crea un nuevo proyecto ATL y le agrega un simple objeto COM (nota: un objeto y no un control) que utiliza el modelo de subprocesamiento de apartamento, ¿habrá una bomba de mensajes funcionando debajo del capó? Quiero crear una ventana oculta que sea miembro de mi clase de objetos COM, pero no estoy seguro de si algún mensaje se entregará o no. ¿Se maneja detrás de escena o importa qué tipo de aplicación está creando realmente el objeto COM?

¿Fue útil?

Solución

No, un objeto ATL COM no implementa una bomba de mensajes de forma predeterminada. Su código debe usarse explícitamente a través de una biblioteca de ventanas normal o implementación de bomba de mensajes explícitos.

Otros consejos

COM utiliza una bomba de mensajes debajo del capó para comunicarse con su objeto COM cuando sea necesario, si su objeto COM vive en un departamento. Así es como se invocan los métodos de forma segura en su objeto (al ser serializados por la cola de mensajes) cuando se los llama un objeto en otro departamento (STA o MTA).

No se puede acceder a la bomba de mensajes: COM la reúne solo cuando es necesario. Al depurar, notará que llama a los métodos directamente en su objeto: no está saltando a través de una bomba de mensajes. Lo estaría, por supuesto, si estuviera juntando varios objetos que viven en diferentes apartamentos.

Si necesita una ventana, puede crear una usando métodos estándar. ATL proporciona clases simples de Windows como CWindow y CWindowImpl que pueden facilitarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top