AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Interface und Pointer of Pointer
Thema durchsuchen
Ansicht
Themen-Optionen

Interface und Pointer of Pointer

Ein Thema von Alter Mann · begonnen am 19. Nov 2007 · letzter Beitrag vom 19. Nov 2007
 
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
936 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Interface und Pointer of Pointer

  Alt 19. Nov 2007, 09:13
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ß
Angehängte Dateien
Dateityp: zip ui_685.zip (3,5 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
 


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 21:56 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