La Web del Programador: Comunidad de Programadores
 
    Pregunta:  39922 - REGISTAR OBJETOS COM
Autor:  fran dominguez
Para probar unos filtros que viene como ejemplo en DirectX8 , al compilarlos estos generan un fichero .lib, que contiene un objeto COM , el problema es que no se como registarlo para poder usarlo.

¿Podeis ayudarme?

Gracias

  Respuesta:  Fernando Gómez
Para obtener cualquier registro COM, haces lo siguiente:

1. Gracias a ese .lib, sabrás cómo es la interfaz.
2. Gracias a ese .lib o al registry, o inclusive a la documentación del componente, sabes su CLSID y su IID. Si no, puedes conseguir el CLSID a través de la función CLSIDFromProgID(...).
3. Todo lo que tienes que hacer es llamar a CoCreateInstance:

// tu función...
HRESULT hRet = S_OK;
IMiInterfaz* pInterfaz = NULL;

hRet = CoCreateInstance(CLSID_DE_TU_COMPONENTE,
NULL,
CLSCTX_ALL,
IID_DE_TU_INTERFAZ,
(void**)&pInterfaz
);
if (FAILED(hRet)) throw hRet;

Nota que en el segundo parámetro que pasas a CoCreateInstance, mandas un NULL. Este parámetro se emplea cuando quieres emplear agregación. La agregación es la manera en la que COM permite la herencia de componentes. Para ello, pasas la referencia de un puntero a IUnknown.

Espero haberte ayudado.

- Tasslehoff -