次の方法で共有


拡張機能からの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();
}

インターフェイスは、使用後すぐに解放する必要があります。 拡張機能にアグリゲーターへの開いている参照がある場合は、循環参照が作成されており、アグリゲーターは拡張機能を解放できません。 そのため、アグリゲーターを解放することはできず、アプリケーションのメモリリークが発生します。