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.