Compartir a través de


Obtención de interfaces ADSI de la extensión

A menudo, una extensión necesita obtener datos del objeto de directorio al que se enlaza. Por ejemplo, una extensión para un objeto de equipo puede querer obtener el dnsHostName del objeto actual del directorio. Esto se puede lograr fácilmente mediante la emisión de una llamada QueryInterface en la interfaz IUnknown para el agregador.

HRESULT hr;
IADs *pADs; ' ADSI Interface to get/set attributes.
 
hr = m_pOuterUnk->QueryInterface(IID_IADs,(void**)&pADs);
 
if ( SUCCEEDED(hr) )
{
    VARIANT var;
    VariantInit(&var);
    hr  = pADs ->Get(_bstr_t("dnsHostName"), &var);
    if ( SUCCEEDED(hr) )
    { 
        printf("%S\n", V_BSTR(&var));
    }
    VariantClear(&var);
    pADs->Release();
}

Debe liberar la interfaz inmediatamente después de usarla. Si la extensión tiene una referencia abierta al agregador, ha creado una referencia circular y el agregador no puede liberar la extensión. Por lo tanto, el agregador no se puede liberar y el resultado es pérdidas de memoria en la aplicación.