Hallo,
bin gerade dabei ein bestehendes Mini-Programm auf die
Jedi-Units um zu stellen. Bestandteil des Programms ist ein ADs-Treeview.
Bisher habe ich die ADsHlp-
Unit von agnisoft verwendet.
Bei der Umstellung auf JwaADsHlp kommt es jedoch zur der Fehlermeldung: ‚Die Typen der tatsächlichen und formalen Parameter müssen übereinstimmen’.
Woran liegt es; Die Function ADsGetObject ist unterschiedlich deklariert:
Code:
ADsHlp
function ADsGetObject(lpszPathName:WideString; const riid:TGUID; out ppObject):HRESULT; safecall;
JwaADsHlp
function ADsGetObject(lpszPathName: LPCWSTR; const riid: TGUID; out ppObject: Pointer): HRESULT; stdcall;
Laut
MSDN ist der out-Parameter ein Pointer of Pointer auf das im zweiten Parameter angeforderte Interface.
Beispiel(ADsHlp):
Code:
//Hilfsklasse für Treeview
type
PNodeData = ^TNodeData;
TNodeData = class(TObject)
private
FName : String;
FClassName: String;
FFullPath : String;
procedure SetName(Value : String);
public
property Name : String read FName write SetName;
property CName : String read FClassName write FClassName;
property FullPath : String read FFullPath;
end;
procedure TNodeData.SetName(Value : String);
begin
FName := Copy(Value, 8, Length(Value));
FFullPath := Value;
end;
procedure TADsTreeDialog.GetLDAPDomain;
var
NSContainer : IADsContainer;
Enum : IEnumVariant;
hr : integer;
varArr : OleVariant;
lNumElements : ULONG;
item : IADs;
s : String;
RN : TTreeNode;
begin
tvADs.Items.Clear;
NSContainer := nil;
Enum := nil;
RN := tvADs.Items.Add(nil, 'Active Directory');
RN.ImageIndex := 0;
ADsGetObject( 'LDAP:', IADsContainer, NSContainer); // <- hier
hr := ADsBuildEnumerator(NSContainer,Enum);
while SUCCEEDED(hr) do
begin
hr := ADsEnumerateNext(Enum, 1, varArr, lNumElements);
if (lNumElements<=0) then Break;
IDispatch(varArr).QueryInterface(IADs, item);
s := item.ADsPath;
LRoot := tvADs.Items.AddChild(RN, s);
LRoot.Data := TNodeData.Create;
TNodeData(LRoot.Data).Name := Item.ADsPath;
TNodeData(LRoot.Data).CName := Item.Class_;
LRoot.ImageIndex := 1;
LRoot.SelectedIndex := 1;
end;
end;
Stellt sich nun für mich die Frage, wie übergebe NSContainer so als Pointer, damit die JwaADsHlp verwendet werden kann?
Gruß