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