Hallo MarLe,
ich möchte es mal so erklären.
IADsUser ist ein Interface, dh. die darüber referenzierten Objekte sind tasächlich schon vorhanden.
In diesem Fall im Active Directory. Über ADsGetObject holst Du dir einen 'Zugriff' auf das Objekt
und möchtest eine bestimmtem Wert zwischenspeichern.
Delphi-Quellcode:
ADsGetObject('
WinNT://' + Domain + '
/' + Username, IADsUser, usr);
assert(usr <>
nil);
s := usr.FullName;
Da Referenzen auf Interface-Objecte nicht frei gegeben werden (müssen/können/dürfen); i.d. Fall dürfen,
da ansonsten das referenzierte Objekt in der ADS freigegeben wird, wird legendlich die Referenz auf
das Objekt gelöscht. Sprich "usr = nil", ohne Dein zutun, da usr nicht mehr benötigt wird.
Da jedoch
S := usr.FullName; auch nur eine Referenz ist und damit auch
Result := S;
werden auch diese Referenzen gelöscht, und es kommt zur Zugriffsverletzung.
Ich hoffe es bringt etwas für das Verständnis.
Vielleicht Morgen etwas mehr.
Gruss