Zitat von
Dezipaitor:
D.h. einfach, dass entweder hr = 0 oder ein Wert ist, den du nicht abfängst.
Nimm OleCheck(ADBla()); ,um eine FehlerException zu bekommen.
Danke.
Und noch das letzte mal das ich eure Nerven in diesem Thread strapaziere bevor ich ihn dann schliesse...
Da die Deklaration von ADsGetObject nun einen Pointer erwartet als out Parameter, habe ichs folgendermassen gelöst:
Delphi-Quellcode:
function TForm1.AccessObject(const PathName: string; const riid:TGUID; out ppObject: Pointer): HRESULT;
var
e: EOleSysError;
begin
if (EdUsername.Text <> '') and (EdPassword.Text <> '') then
result := ADsOpenObject(LPCWSTR(PathName), LPCWSTR(EdUsername.Text), LPCWSTR(EdPassword.Text), ADS_USE_ENCRYPTION, riid, ppObject)
else
result := ADsGetObject(LPCWSTR(PathName), riid, ppObject);
if not Succeeded(result) then
begin
e := EOleSysError.Create('', result, 0);
MessageDlg(e.Message, mtError, [mbOK], 0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
usr: Pointer;
begin
ClearFields;
ShowUser(EdLDAP.Text, CBShowUser);
sEditedFields.Clear;
sOldObjectPath := EdLDAP.Text;
if SUCCEEDED(AccessObject(EdLDAP.Text, IADsUser, usr)) then
EnumGroupsOfUser(IADsUser(usr), ListBox1.Items);
end;
Ist das grundsätzlich richtig? oder würde man das anders machen?