Compartir a través de


Contenedor al que se puede llamar en tiempo de ejecución

Common Language Runtime expone objetos COM mediante un proxy denominado contenedor invocable en tiempo de ejecución (RCW). Aunque el RCW aparece como un objeto corriente para los clientes .NET, su función principal es calcular referencias de llamadas entre un cliente .NET y un objeto COM.

El motor en tiempo de ejecución crea exactamente un RCW para cada objeto COM, independientemente del número de referencias que existan en el objeto. El motor en tiempo de ejecución mantiene un único RCW por proceso para cada objeto. Si se crea un RCW en un dominio de aplicación o apartamento y, a continuación, se pasa una referencia a otro dominio de aplicación o apartamento, se utilizará un servidor proxy al primer objeto. Como se muestra en la siguiente ilustración, un número indeterminado de clientes administrados puede contener una referencia a los objetos COM que exponen las interfaces INew e INewer.

Acceso a los objetos COM mediante el contenedor invocable en tiempo de ejecución

RCW

Con los metadatos derivados de una biblioteca de tipos, el motor en tiempo de ejecución crea el objeto COM al que se está llamando y un contenedor para dicho objeto. Cada RCW mantiene una caché de punteros de interfaz en el objeto COM que contiene y libera su referencia en el objeto COM cuando el RCW ya no es necesario. El motor en tiempo de ejecución realiza la recolección de elementos no utilizados en el RCW.

Entre otras actividades, el RCW calcula referencias de datos entre los códigos administrado y no administrado en nombre del objeto que contiene. Concretamente, el RCW proporciona cálculo de referencias a argumentos de método y valores devueltos de método cuando el cliente y el servidor tienen representaciones distintas de los datos que pasan de uno a otro.

El contenedor estándar impone las reglas integradas de cálculo de referencias. Por ejemplo, cuando un cliente .NET pasa a un objeto no administrado un tipo String como parte de un argumento, el contenedor convierte el tipo String en un tipo BSTR. Si el objeto COM devuelve un tipo BSTR a su llamador administrado, el llamador recibe una cadena. Tanto el cliente como el servidor envían y reciben datos que les son conocidos. Los demás tipos no requieren conversión. Por ejemplo, un contenedor estándar pasará siempre un entero de 4 bytes entre código administrado y no administrado sin convertir el tipo.

Vea también

Conceptos

Contenedores COM

Calcular referencias de interfaces seleccionadas

Contenedor COM al que se puede llamar

Importar una biblioteca de tipos como un ensamblado

Otros recursos

Resumen de la conversión de bibliotecas de tipos en ensamblados