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
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
Comment