Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para crear una instancia del controlador, si es una que no obtiene datos adicionales del servidor, el servidor debe implementar IStdMarshalInfo , pero no IMarshal. IStdMarshalInfo tiene un método , GetClassForHandler, que recupera el CLSID del controlador de objetos que se va a usar en el proceso de destino. COM llama a esto cuando llama a CoMarshalInterface automáticamente y activa el controlador en el lado cliente.
A continuación, las implementaciones de servidor y controlador deben llamar a la función CoGetStdMarshalEx . Esta función crea un serializador estándar en cada lado (denominado administrador de proxy en el lado cliente y un administrador de código auxiliar en el lado servidor).
El servidor llama a CoGetStdMarshalEx, pasando la marca SMEXF_SERVER. Esto crea un serializador estándar del lado servidor (administrador de código auxiliar). La estructura del lado servidor se muestra en la ilustración siguiente:
Estructura de Server-Side
El controlador llama a CoGetStdMarshalEx, pasando la marca SMEXF_HANDLER. Esto crea un serializador estándar del lado cliente (administrador de proxy) y lo agrega con el controlador en el lado cliente. La duración de ambos se administra mediante el objeto de identidad de control (implementación de IUnknown) que el sistema implementa cuando el controlador llama a CoGetStdMarshalEx. La estructura del lado cliente se muestra en la ilustración siguiente.
Estructura de Client-Side
Como se muestra en la ilustración anterior, el controlador se intercala realmente entre el administrador de proxy y la identidad o control desconocido. Esto proporciona al sistema control sobre la duración del objeto, al mismo tiempo que proporciona al controlador control sobre las interfaces expuestas. La línea discontinua entre el Administrador de identidades y proxy indica que los dos comparten una estrecha integración a través de interfaces privadas internas.
Cuando COM llama a CoUnmarshalInterface para el cliente, crea la instancia del controlador, agregación con la identidad. El controlador creará el serializador estándar (a través de la llamada a CoGetStdMarshalEx, pasando el control desconocido que recibió cuando se creó). El controlador no implementa IMarshal , sino que solo devuelve IMarshal del serializador estándar. Incluso si el controlador implementa IMarshal, no se llamará durante un desmarshal.
Si dos subprocesos desactivan simultáneamente el mismo objeto por primera vez, es posible que dos controladores se creen temporalmente. Posteriormente se liberará uno.
Temas relacionados