Einzelnen Beitrag anzeigen

Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Wie nutzt man ein Interface (IKnownFolderManager)

  Alt 5. Nov 2013, 15:37
Hallo zusammen,
Um für die neueren Windowsversionen gerüstet zu sein, dachte ich es wäre gut das IKnownfolderManager-Interface zu nutzen.
dabei ist mir aufgefallen, daß ich überhaupt keine Ahnung habe, wie ein Interface richtig eingesetzt wird.
Aus dem was ich mir zusammengesucht habe habe ich dann die folgende Unit gebastelt.
Mein konkretes Problem ist daß
Zitat:
[DCC Fehler] Unit1.pas(24): E2065 Ungenügende Forward- oder External-Deklaration: 'TKnownFolderManager.FolderIdFromCsidl'
......
angemeckert wird. Da die Funktionen aber im Interface stecken, verstehe ich diese Fehlermeldung überhaupt nicht.

U.U. ist das überhaupt Blödsinn, dann wäre es schön wenn Ihr mir sagen könntet wie ich's richtig machen muß.

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls
  ,activeX
  ,shlObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TKnownFolderManager = class(TInterfacedObject, IKnownFolderManager)
  public
    function FolderIdFromCsidl(nCsidl: Integer;
      var pfid: TKnownFolderID): HRESULT; stdcall;
    function FolderIdToCsidl(const rfid: TIID;
      var pnCsidl: Integer): HRESULT; stdcall;
    function GetFolderIds(ppKFId: array of TKnownFolderID;
      var pCount: UINT): HRESULT; stdcall;
    function GetFolder(const rfid: TIID;
      out ppkf: IKnownFolder): HRESULT; stdcall;
    function GetFolderByName(pszCanonicalName: LPCWSTR;
      out ppkf: IKnownFolder): HRESULT; stdcall;
    function RegisterFolder(const rfid: TIID;
      var pKFD: TKnownFolderDefinition): HRESULT; stdcall;
    function UnregisterFolder(const rfid: TIID): HRESULT; stdcall;
    function FindFolderFromPath(pszPath: LPCWSTR; mode: FFFP_MODE;
      out ppkf: IKnownFolder): HRESULT; stdcall;
    function FindFolderFromIDList(pidl: PItemIDList;
      out ppkf: IKnownFolder): HRESULT; stdcall;
    function Redirect(const rfid: TIID; hwnd: HWND; flags: TKFRedirectFlags;
      pszTargetPath: LPCWSTR; cFolders: UINT; var pExclusion: TKnownFolderID;
      var ppszError: LPWSTR): HRESULT; stdcall;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);

var
  io : TKnownFolderManager;
  count : Cardinal;
  vielefolder : array of TKnownFolderID;
  buffer : array [0..1024] of byte absolute vielefolder;
begin
  io:=TKnownFolderManager.Create;
  io.GetFolderIds(vielefolder,count);
  Memo1.Lines.Add(' Anz:'+inttostr(count));
end;
(hierfür verwende ich übrigens xe2)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat