Compartilhar via


Obtendo interfaces ADSI de sua extensão

Uma extensão geralmente precisa obter dados do objeto de diretório ao qual se vincula. Por exemplo, uma extensão para um objeto de computador pode desejar obter o dnsHostName do objeto atual do diretório. Isso pode ser facilmente alcançado emitindo uma chamada QueryInterface na interface IUnknown para o 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();
}

Você deve liberar a interface imediatamente após usá-lo. Se a extensão tiver uma referência aberta ao agregador, você criou uma referência circular e o agregador não poderá liberar a extensão. Portanto, o agregador não pode ser liberado e o resultado são vazamentos de memória em seu aplicativo.