从扩展获取 ADSI 接口

扩展通常需要从绑定到的目录对象获取数据。 例如, 计算机 对象的扩展可能需要从目录中获取当前对象的 dnsHostName 。 通过为聚合器发出 IUnknown 接口的 QueryInterface 调用,可以轻松实现此目的。

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();
}

使用接口后,应立即释放该接口。 如果扩展具有对聚合器的开放引用,则已创建循环引用,聚合器无法释放该扩展。 因此,聚合器无法释放,结果是应用程序中的内存泄漏。