AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.com

AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.com

Ein Thema von cherry · begonnen am 5. Okt 2007 · letzter Beitrag vom 8. Okt 2007
Antwort Antwort
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.com

  Alt 5. Okt 2007, 10:57
Hi

Will auf unser AD zugreiffen... auf www.agnisoft.com habe ich einige Beispiele gedownloaded und die englische Einführung hebe ich durchgelesen. Bin also grad dran eine dll zu erstellen die mir alle user des AD in eine TreeView schreiben soll...

Es erscheint dieser Fehler beim Kompilieren...

[Pascal Fehler] ADSI.dpr(47): E2250 Es gibt keine überladene Version von 'ADsEnumerateObjects', die man mit diesen Argumenten aufrufen kann ...von diesem Code:

Delphi-Quellcode:
library ADSI;

{ enemyleft[at]gmail.com - 05.10.2007 }

uses
  SysUtils,
  Classes,
  ActiveDs_TLB,
  adshlp,
  Variants,
  ComCtrls;

var
  trUser: TTreeView;

{$R *.res}

// open winnt (ActiveDirectory) with other username and password
function OpenWinNT(domain, username, password: String): TTreeView; stdcall;
var
  dom: IADsContainer;
begin
  ADsOpenObject('WinNT://' + domain, username, password, 1, IADsContainer, dom);
  result := trUser;
end;

// open winnt (ActiveDirectory) with current user
function GetWinNT(domain: String): TTreeView; stdcall;
var
  dom: IADsContainer;
begin
  ADsGetObject('WinNT://' + domain, IADsContainer, dom);
  result := trUser;
end;

// adds the user to the chosen list
procedure AddToTree(disp: IADs);
begin
  trUser.Items.Add(nil, disp.Name);
end;

// set some properties for open winnt
procedure OpenProperties(dom: IADsContainer);
begin
  dom.Filter := VarArrayOf(['user']);
  ADsEnumerateObjects(dom, AddToTree);
end;

exports
  OpenWinNT,
  GetWinNT;

begin

end.
Ich denke wenn du die von mir, resp. die von Agnisoft.com verwendete Methode nicht kennst, kannst du mir auch nicht helfen.
Die Dateien: ActiveDs_TLB.pas und adshlp.pas habe ich von agnisoft...

hilf mir
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 11:17
Hallo,

hast du übersehen, dass AddToTree() eine procedure of object sein muss, damit du diese procedure als CallBack in AdsEnumerateObjects() verwenden kannst? Bastel dir ein helper object und mache deine freien Routinen zu Methoden.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 12:39
hey marabu

vielen dank. Die Grundidee versteh ich nun aber kA wie man das macht..
du wirst jetzt wahrscheinlich lachen.. aber habs mal so versucht...

Delphi-Quellcode:
library ADSI;

{ enemyleft[at]gmail.com - 05.10.2007 }

uses
  SysUtils,
  Classes,
  ActiveDs_TLB,
  adshlp,
  Variants,
  ComCtrls;

var
  trUser: TTreeView;
  helper: TObject;
  dn : IADs;

type
  THelper = class(TObject)
    procedure AddToTree;
  private
  public
  end;

{$R *.res}

// open winnt (ActiveDirectory) with other username and password
function OpenWinNT(domain, username, password: String): TTreeView; stdcall;
var
  dom: IADsContainer;
begin
  ADsOpenObject('WinNT://' + domain, username, password, 1, IADsContainer, dom);
  result := trUser;
end;

// open winnt (ActiveDirectory) with current user
function GetWinNT(domain: String): TTreeView; stdcall;
var
  dom: IADsContainer;
begin
  ADsGetObject('WinNT://' + domain, IADsContainer, dom);
  result := trUser;
end;

// adds the user to the chosen list
procedure THelper.AddToTree(disp: IADs);
begin
  trUser.Items.Add(nil, disp.Name);
end;

// set some properties for open winnt
procedure OpenProperties(dom: IADsContainer);
begin
  dom.Filter := VarArrayOf(['user']);
  ADsEnumerateObjects(dom, THelper.AddToTree);
end;

exports
  OpenWinNT,
  GetWinNT;

begin

end.
Fehler -> disp.Name ist dann nicht deklariert?!?!?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 12:42

LOL logo... dem Objekt fehl der Link zu ActiveDs_TLB, adshlp -> aber wie stelle ich die meinem Obj zur Verfügung?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 13:12
Dein helper object hat den falschen Typ, besser so:

Delphi-Quellcode:
uses
  SysUtils,
  Classes,
  ActiveDs_TLB,
  adshlp,
  Variants,
  ComCtrls;

type
  THelper = class(TObject)
    procedure AddToTree;
  private
  public
  end;

var
  trUser: TTreeView;
  helper: THelper;
  dn : IADs;
Im Initialisierungscode deiner library musst du dann auch dein helper object instanzieren.
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 13:17
also die einzige änderung von mir zu dir war

helper: THelper; das hat aber nicht viel gebracht, findet disp immer noch nicht...

sieht jetz also so aus bei mir:

Delphi-Quellcode:
library ADSI;

uses
  SysUtils,
  Classes,
  ActiveDs_TLB,
  adshlp,
  Variants,
  ComCtrls;

type
  THelper = class(TObject)
    procedure AddToTree;
  private
  public
  end;

var
  trUser: TTreeView;
  helper: THelper;
[Pascal Fehler] ADSI.dpr(47): E2003 Undefinierter Bezeichner: 'disp'
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 13:22
ok bin jetzt ein bisschen weiter mit diesem Code:

Delphi-Quellcode:
library ADSI;

{ [email]enemyleft@gmail.com[/email] - 05.10.2007 }

uses
  SysUtils,
  Classes,
  ActiveDs_TLB,
  adshlp,
  Variants,
  ComCtrls;

type
  THelper = class(TObject)
    procedure AddToTree(disp: IADs);
  private
  public
  end;

var
  trUser: TTreeView;
  helper: THelper;

{$R *.res}

// open winnt (ActiveDirectory) with other username and password
function OpenWinNT(domain, username, password: String): TTreeView; stdcall;
var
  dom: IADsContainer;
begin
  ADsOpenObject('WinNT://' + domain, username, password, 1, IADsContainer, dom);
  result := trUser;
end;

// open winnt (ActiveDirectory) with current user
function GetWinNT(domain: String): TTreeView; stdcall;
var
  dom: IADsContainer;
begin
  ADsGetObject('WinNT://' + domain, IADsContainer, dom);
  result := trUser;
end;

// adds the user to the chosen list
procedure THelper.AddToTree(disp: IADs);
begin
  trUser.Items.Add(nil, disp.Name);
end;

// set some properties for open winnt
procedure OpenProperties(dom: IADsContainer);
begin
  dom.Filter := VarArrayOf(['user']);
  ADsEnumerateObjects(dom, THelper.AddToTree);
end;

exports
  OpenWinNT,
  GetWinNT;

begin

end.
erhalte ich nun die folgende neue Fehlermeldung:

[Pascal Fehler] ADSI.dpr(54): E2010 Inkompatible Typen: 'TADsEnumCallBack' und 'Procedure'
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 5. Okt 2007, 13:41
Entweder du instanzierst das helper object oder du musst eine Klassenmethode verwenden:

Delphi-Quellcode:
type
  THelper = class(TObject)
    class procedure AddToTree(disp: IADs);
  end;

var
  trUser: TTreeView;
  dn : IADs;

// ...

// adds the user to the chosen list
class procedure THelper.AddToTree(disp: IADs);
begin
  trUser.Items.Add(nil, disp.Name);
end;

// set some properties for open winnt
procedure OpenProperties(dom: IADsContainer);
begin
  dom.Filter := VarArrayOf(['user']);
  ADsEnumerateObjects(dom, THelper.AddToTree);
end;
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#9

Re: AD zugriff mit ActiveDs_TLB und adshlp - www.agnisoft.co

  Alt 8. Okt 2007, 12:43
Super marabu. Vielen Dank für deine Hilfe... meine dll sieht im moment so aus und funktioniert bestens...
ich werde sie noch ausbauen und wenn sie, falls sie, ausgereift genug wird, stelle ich sie im opensource zur verfügung...
dann könnt ihr dann auch gleich noch anbringen wo man was verbessern muss!

LG enemyleft

Delphi-Quellcode:
library ADSI;

{ enemyleft[at]gmail.com - 05.10.2007 }

uses
  SysUtils,
  Classes,
  ActiveDs_TLB,
  adshlp,
  Variants;

type
  T2dStringArray = Array of Array of String;
  TStringArray = Array[0..1] of String;
  THelper = class(TObject)
    procedure AddToTreeUsers(disp: IADs);
  end;

var
  values: T2dStringArray;
  value: TStringArray;
  helper: THelper;
  i: integer = -1;

{$R *.res}

// enumerate users
procedure GettingUsers(dom: IADsContainer);
begin
  dom.Filter := VarArrayOf(['user']);
  ADsEnumerateObjects(dom, helper.AddToTreeUsers);
end;

// DOMAIN
// open winnt (ActiveDirectory) with other username and password
function OpenUsers(domain, username, password: String): T2dStringArray; stdcall;
var
  dom: IADsContainer;
begin
  ADsOpenObject('WinNT://' + domain, username, password, 1, IADsContainer, dom);
  GettingUsers(dom);
  result := values;
end;

// DOMAIN
// open winnt (ActiveDirectory) with current user
function GetUsers(domain: String): T2dStringArray; stdcall;
var
  dom: IADsContainer;
begin
  ADsGetObject('WinNT://' + domain, IADsContainer, dom);
  GettingUsers(dom);
  result := values;
end;

// USER DETAIL
// open winnt (ActiveDirectory) with current user
function GetUsersDetail(domain, username: String): TStringArray; stdcall;
var
  usr: IADsUser;
begin
  ADsGetObject('WinNT://' + domain + '/' + username, IADsUser, usr);
  value[0] := usr.FullName;
  value[1] := usr.Description;
  result := value;
end;

// add the users into the array
procedure THelper.AddToTreeUsers(disp: IADs);
begin
  Inc(i);
  SetLength(values, i+1, 2);
  values[i,0] := disp.Name;
  values[i,1] := disp.Schema;
end;

exports
  OpenUsers,
  GetUsers,
  GetUsersDetail;

begin

end.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz