La biblioteca COM

Cualquier proceso que use COM debe inicializar y anular la inicialización de la biblioteca COM. Además de ser una especificación, COM también implementa algunos servicios importantes en esta biblioteca. Se proporciona como un conjunto de archivos DLL y EXE (principalmente Ole32.dll y Rpcss.exe) en Microsoft Windows, la biblioteca COM incluye lo siguiente:

  • Un pequeño número de funciones fundamentales que facilitan la creación de aplicaciones COM, tanto cliente como servidor. Para los clientes, COM proporciona funciones básicas para crear objetos. En el caso de los servidores, COM proporciona los medios para exponer sus objetos.

  • Servicios de localizador de implementación a través de los cuales COM determina, a partir de un identificador de clase único (CLSID), que servidor implementa esa clase y dónde se encuentra ese servidor. Este servicio incluye compatibilidad con un nivel de direccionamiento indirecto, normalmente un registro del sistema, entre la identidad de una clase de objeto y el empaquetado de la implementación para que los clientes sean independientes del empaquetado, lo que puede cambiar en el futuro.

  • El procedimiento remoto transparente llama a cuando un objeto se ejecuta en un servidor local o remoto.

  • Mecanismo estándar para permitir que una aplicación controle cómo se asigna la memoria dentro de su proceso, especialmente la memoria que debe pasarse entre objetos cooperantes para que se pueda liberar correctamente.

Para usar servicios COM básicos, todos los subprocesos COM de ejecución en clientes y servidores fuera de proceso deben llamar a la función CoInitialize o CoInitializeEx antes de llamar a cualquier otra función COM excepto las llamadas de asignación de memoria. CoInitializeEx reemplaza la otra función, agregando un parámetro que permite especificar el modelo de subprocesos del subproceso: subproceso de apartamento o subproceso libre. Una llamada a CoInitialize simplemente establece el modelo de subprocesos en subproceso de apartamento.

Las aplicaciones de documentos compuestos OLE llaman a la función OleInitialize , que llama a CoInitializeEx y también realiza alguna inicialización necesaria para documentos compuestos. Por lo tanto, los subprocesos que llaman a OleInitialize no pueden ser subprocesos libres. Para obtener información sobre el subproceso en clientes y servidores, vea Procesos, Subprocesos y Apartamentos.

Los servidores en proceso no llaman a las funciones de inicialización porque se cargan en un proceso que ya lo ha hecho. Como resultado, los servidores en proceso deben establecer su modelo de subprocesos en el Registro en la clave InprocServer32 . Para obtener información detallada sobre los problemas de subprocesos en los servidores en proceso, vea Problemas de subprocesos del servidor en proceso.

También es importante anular la inicialización de la biblioteca. Para cada llamada a CoInitialize o CoInitializeEx, debe haber una llamada correspondiente a CoUninitialize. Para cada llamada a OleInitialize, debe haber una llamada correspondiente a OleUninitialize.

Los servidores en proceso pueden suponer que el proceso en el que se cargan ya ha realizado estos pasos.

The Component Object Model [Modelo de objetos componentes (COM)]