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
Antwort Antwort
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 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
marabu

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

Re: Interface und Pointer of Pointer

  Alt 19. Nov 2007, 10:23
Hallo,

hast du es schon so probiert?

ADsGetObject('LDAP:', IID_IADsContainer, Pointer(NSContainer)); Grüße vom marabu
  Mit Zitat antworten Zitat
Alter Mann

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

Re: Interface und Pointer of Pointer

  Alt 19. Nov 2007, 12:49
Danke, das war es.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: Interface und Pointer of Pointer

  Alt 19. Nov 2007, 20:16
Die JEDI API verwendet so gut wie immer einen Typ, um die Typsicherheit von Delphi aufrechtzuerhalten.
Zudem versucht sie so nahe, wie möglich an den C-Header Dateien sich zu orientieren.


Verwendest du die neue JEDI API?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:41 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