Announcement

Collapse
No announcement yet.

ADs Gruppen in einem Thread einlesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADs Gruppen in einem Thread einlesen

    Hallo,<br>ich habe eine Procedure, welche ich beim Start des Programmes aufrufe, um vom AD Benutzergruppen zu lesen. Da dies etwas länger dauert, habe ich mir (in meinem jugendlichen Leichtsinn :-) vorgestellt, diese in einem Thread nach dem PRG Start einzulesen. Die Procedure hat vorher (von "Hand" gestartet funktioniert!)<br>
    Nachdem ich meinem Projekt eine Thread-Unit zugefügt habe rufe ich folgendes auf:<br>
    <PRE>
    // Starte Thread zum laden der Gruppen...
    LoadProcess := TMyThread.Create(true);
    LoadProcess.Priority := tpLower;
    LoadProcess.Resume;
    </PRE>

    danach wird durch den Thread die Procedure LADE_GRUPPEN aufgerufen:<br>
    <PRE>
    procedure TFormMain.LADE_GRUPPEN;
    var
    szPath : string;
    begin
    szPath := 'LDAP://xxxxxxxxxxxx';
    AUFRUF_GRUPPEN(szPath);
    ...
    end;

    procedure TFormMain.AUFRUF_GRUPPEN(Pfad:ansistring);
    begin
    ADsEnumerateObjects(Pfad, GRUPPEN_AUFLISTEN);
    end;
    </PRE>
    an GRUPPEN_AUFLISTEN wird der IADS Container übergeben und die Details dem TreeView zugefügt.<br>

    das ADsEnumerateObjects.. sieht folgendermassen aus:<br>
    <PRE>
    procedure ADsEnumerateObjects(const Path : string; Func : TADsEnumCallback);
    var
    x : IADsContainer;
    begin
    try
    ADsGetObject( Path, IADsContainer, x);
    except
    raise Exception.Create('IADsContainer not supported');
    end;
    ADsEnumerateObjects(x, Func);
    end;
    </PRE>

    das ADsGetObject ist so deklariert: function ADsGetObject; external ADSI;

    <br>Genau beim Aufruf des ADsGetObject (external ADSI) kracht es mit Fehlermeldung: Exception class Exception :-)<br>Warum kann der Thread das "external ADSI" nicht verwenden?
    <br> cu Michael

  • #2
    Hallo Michael,<br><br>hast Du den Thread für die Nutzung von COM vorbereitet? Wenn nicht, dann mit der Funktion CoInitialize (Unit ActiveX) nachholen (Muss durch den Thread aufgerufen werden). Bei Beendigung des Threads mit der Funktion CoUninitialize wieder aufräumen.<br><br>MFG<br>Andr&#233

    Comment


    • #3
      Hi Andre,<br>VIELEN DANK :-) Ich habe das Thema hier 1000 mal gelesen, aber trotzdem bin ich nicht drauf gekommen!<br>cu Michae

      Comment

      Working...
      X