
Cliente:
CLSID clsid;
IClassFactory *pClf;
IUnknown *pUnk;
CoInitialize(NULL);
CLSIDFromProgID("Openbase.OBcom.1",&clsid);
COM:
Usa o Registry para procurar a class ID de "Openbase.OBcom.1".
Cliente:
CoGetClassObject(clsid, CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory,
(void **) &pClf);
COM:
COM usa a class ID para procurar pelo componente em memória
if (DLL componente não está carregada){
COM pega o nome da DLL do Registry
COM carrega a DLL componente na memória
}
componente DLL:
if (componente carregado agora){
Objetos globais da factory são construidos
InitInstance da DLL é chamada
}
COM:
COM chama a DllGetClassObject exportada globalmente pela DLL com a CLSID que foi
passada para CoGetClassObject
componente DLL:
DllGetClassObject retorna IClassFactory *
COM
COM retorna IClassFactory * para o cliente:
Cliente:
pClf->CreateInstance(NULL, IID_IUnknown, (void **)&PUnk);
componente DLL:
