Abrufen von ADSI-Schnittstellen aus Ihrer Erweiterung
Eine Erweiterung muss häufig Daten aus dem Verzeichnisobjekt abrufen, an das sie gebunden ist. Beispielsweise kann eine Erweiterung für ein Computerobjekt den dnsHostName des aktuellen Objekts aus dem Verzeichnis abrufen. Dies kann problemlos erreicht werden, indem Sie einen QueryInterface-Aufruf auf der IUnknown-Schnittstelle für den Aggregator ausgeben.
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();
}
Sie sollten die Schnittstelle sofort nach der Verwendung freigeben. Wenn die Erweiterung über einen offenen Verweis auf den Aggregator verfügt, haben Sie einen Zirkelverweis erstellt, und der Aggregator kann die Erweiterung nicht freigeben. Daher kann der Aggregator nicht freigegeben werden, und das Ergebnis sind Speicherverluste in Ihrer Anwendung.