Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Plugin mit Interface Schnittstelle mit Zugriff auf Host

  Alt 18. Sep 2007, 15:37
Nach dem ich mich mit Hydra und sakuras Plugin-Tutorial beschäftigt habe, habe ich mal so zum Lernen selber etwas auf die Beine gestellt:

Interface:
Delphi-Quellcode:
type
  IHost = interface(IInterface)
    ['{BB3C55ED-5AC3-4CE8-84B7-7B11DE022245}']
    function Handle: THandle;
    function HostFilename: String;
  end;

  IPlugin = interface(IInterface)
    ['{0A8E4F91-16C9-4A95-858F-DF1AB61BE406}']
    function Name: String;
    function VerMajor: Cardinal;
    function VerMinor: Cardinal;
    function Author: String;
    function Comment: String;
    procedure Execute(Host: IHost);
  end;
Plugin:
Delphi-Quellcode:
type
  TPlugin = class(TInterfacedObject, IPlugin)
  private
    function Name: string;
    function VerMajor: Cardinal;
    function VerMinor: Cardinal;
    function Author: string;
    function Comment: string;
    procedure Execute(Host: IHost);
  end;

...;

procedure TPlugin.Execute(Host: IHost);
var
  Buffer: array [0..255] of Char;
begin
  SendMessage(Host.Handle, WM_GETTEXT, sizeof(Buffer), Integer(@Buffer));
  MessageBox(Host.Handle, Buffer, 'Plugin MessageBox', MB_ICONINFORMATION);
end;
Host:
Delphi-Quellcode:
procedure TfrmMainHost.btnLoadPluginsClick(Sender: TObject);
begin
  try
    LoadPlugin(ExtractFilePath(ParamStr(0)) + 'Plugin01.dll');
    FPlugin.Execute((FHost as IHost));
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

function TfrmMainHost.Handle: THandle;
begin
  Result := Handle;
end;
Jetzt bekomme ich leider beim Aufruf der Execu8te-Methode eine AV und ich weiß nicht warum.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat