Anterior Sumário Próximo OpenBASE! o Banco de Dados inteligente. Fale conosco!

Como um Cliente COM chama um Componente In-Process

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:

Anterior Sumário Próximo OpenBASE! o Banco de Dados inteligente. Fale conosco!