Obtention des interfaces ADSI à partir de votre extension
Une extension doit souvent recevoir des données de l’objet annuaire auquel elle est liée. Par exemple, une extension pour un objet ordinateur peut vouloir obtenir le dNSHostName de l’objet actuel à partir de l’annuaire. Cela peut être facilement effectué en émettant un appel QueryInterface sur l’interface IUnknown pour l’agrégation.
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();
}
Vous devez libérer l’interface immédiatement après l’avoir utilisée. Si l’extension a une référence ouverte à l’agrégation, vous avez créé une référence circulaire et l’agrégation ne peut pas libérer l’extension. Par conséquent, l’agrégation ne peut pas être libérée et le résultat est une fuite de mémoire dans votre application.