Ejemplo de ATL de llamadas (clasificación) interfaces COM subprocesadas de apartamento desde un subproceso de trabajo

StackOverflow https://stackoverflow.com/questions/5411927

Pregunta

Estoy buscando un ejemplo de código que ilustre la realización de llamadas COM de subprocesos cruzados en una DLL del servidor COM de ATL. ¿Conoce uno?

Más detalles:

Mi componente es un objeto auxiliar del navegador de IE que necesita trabajar en un hilo de fondo. En uno de los métodos de mi objeto llamado desde el hilo principal de IE, IE me da un puntero al DOM de IE ( IHtmlWindow2 ) y lo guardo en una variable miembro local.

Ahora quiero crear un hilo de trabajo que pueda llamar de forma asincrónica a métodos en ese puntero de interfaz COM que acabo de almacenar.

Si es importante, mis llamadas ocurrirán después de que regrese del método donde obtuve el puntero de interfaz de IE, por lo que IE (y no mi código) tendrá el control cuando intente hacer las llamadas desde mi hilo de trabajo.

Tanto mi componente como la aplicación de host tienen un subproceso de Apartment.

¿Alguien conoce un buen ejemplo de C ++ que muestre cómo se hace esto?

Estoy buscando específicamente una muestra breve y sencilla (y no solo un indicador de documentación relevante) porque leí esta pregunta y sus respuestas y me sentí intimidado por la cantidad de aprendizaje que tendría que hacer escribir una implementación desde cero. Cada vez que alguien recomienda leer un libro de Don Box antes de escribir código, sabes que te espera una noche larga y confusa ... :-)

¿Fue útil?

Solución

Eso es automático en COM, se encarga de los requisitos del apartamento y ordenará la llamada si el puntero de la interfaz tiene afinidad con STA.Debe calcular el puntero de la interfaz antes de usarlo en el hilo, ATL tiene los métodos auxiliares AtlMarshalPtrInProc () y AtlUnmarshalPtr () para hacerlo más fácil.CoMarshalInterThreadInterfaceInStream () o IGlobalInterfaceTable si desea hacerlo usted mismo.

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