Obtener un puntero a un objeto
Dado que COM no tiene un modelo de clase estricto, hay cuatro maneras de crear instancias de un cliente o obtener un puntero a una interfaz en un objeto:
- Llame a una función de biblioteca COM que cree un objeto de un tipo predeterminado; es decir, la función devolverá un puntero a una sola interfaz específica para una clase de objeto específica.
- Llame a una función de biblioteca COM que pueda crear un objeto basado en un identificador de clase (CLSID) y que devuelva cualquier tipo de puntero de interfaz solicitado.
- Llame a un método de alguna interfaz que crea otro objeto (o se conecta a uno existente) y devuelve un puntero de interfaz en ese objeto independiente.
- Implemente un objeto con una interfaz a través de la cual otros objetos pasan su puntero de interfaz al cliente directamente.
Para obtener información sobre cómo obtener punteros a otras interfaces en un objeto después de tener el primero, vea QueryInterface: Navegar en un objeto.
Crear un objeto de un tipo predeterminado
Hay numerosas funciones COM, como CoGetMalloc, que devuelven punteros a implementaciones de interfaz específicas. (CoGetMalloc recupera un puntero al asignador de memoria COM estándar). La mayoría de estas son funciones auxiliares y la mayoría de estas funciones se describen en las secciones de referencia de esta documentación, en el área específica a la que están relacionadas, como el almacenamiento o la transferencia de datos.
Crear un objeto basado en un CLSID
Hay varias funciones que, dada una CLSID, un cliente puede llamar a para crear una instancia de objeto y obtener un puntero a ella. Todas estas funciones se basan en la función CoGetClassObject, que crea un objeto de clase y proporciona un puntero a una interfaz que permite crear instancias de esa clase. Aunque debe haber información que indique en qué sistema reside el servidor, no es necesario incluir esa información en el cliente. El cliente solo debe conocer el CLSID y nunca la ruta de acceso absoluta del código del servidor. Para obtener más información, vea Crear un objeto a través de un objeto de clase.
Devolver un puntero a un objeto independiente
Entre los muchos métodos de interfaz que devuelven un puntero a un objeto independiente hay varios que crean y devuelven un puntero a un objeto enumerador, lo que permite determinar cuántos elementos de un tipo determinado mantiene un objeto. COM define interfaces para enumerar una amplia variedad de elementos, como cadenas, estructuras importantes, monikers e punteros de interfaz IUnknown . La manera típica de crear una instancia de enumerador y obtener un puntero a su interfaz es llamar a un método desde otra interfaz. Por ejemplo, la interfaz IDataObject define dos métodos, EnumDAdvise y EnumFormatEtc, que devuelven punteros a interfaces en dos objetos de enumeración diferentes. Hay muchos otros ejemplos en COM de métodos que devuelven punteros a objetos, como la interfaz de documento compuesta OLE IOleObject::GetClientSite, que, cuando se llama en el objeto incrustado o vinculado, devuelve un puntero a la implementación del objeto contenedor de IOleClientSite.
Implementar un objeto a través del cual pasar un puntero de interfaz directamente al cliente
Cuando dos objetos, como un contenedor de documentos compuesto OLE y un servidor, necesitan comunicación bidireccional, cada uno implementa un objeto que contiene un método de interfaz a través del cual puede pasar un puntero de interfaz al otro objeto. El objeto de implementación, que también es el cliente del objeto creado, puede llamar al método y obtener el puntero que se pasó.
Temas relacionados