Zitat von
Remko:
AdsOpenObject always returns a HRESULT which you can check against known values (case hr of). When you declare a function as safecall in Delphi a wrapper (sometimes called an
exception firewall) is added that will raise exceptions for you. If you want you can declare the function as safecall (just replace stdcall with safecall) and use a try..except handler.
PS: the other functions in AdsHlp such as AdsGetObject have the same declaration using WideString so you should change those as well...
Hmm... und schon wieder schleicht sich ein Problem ein:
Wenn ich die Funktionen AdsGetObject/AdsOpenObject mit safecall deklariere, werden zwar die exceptions wieder ausgelöst nur verhaltet sich das Ganze wieder ähnlich unstabil wie vorher...
Diese Funktion zeigt mir einen Benutzer an und die dazugehörigen Gruppen... Dies funktioniert wenn ich die Funktionen im Wrapper mit stdcall deklariere, nicht aber mit safecall! >> wenn ich das Auflisten der Gruppen auskommentiere gehts... ist doch komisch oder?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
usr: IADsUser;
begin
ClearFields;
ShowUser(EdLDAP.Text, CBShowUser);
sEditedFields.Clear;
sOldObjectPath := EdLDAP.Text;
if SUCCEEDED(AccessObject(EdLDAP.Text, IADsUser, usr))
then
EnumGroupsOfUser(usr, ListBox1.Items);
//<-- Access Violation here >> Die Haltepunkte in der Funktion kommen nicht zum Zug!!!
end;