📄 plugins.pas
字号:
Unit Plugins;
Interface
Uses windows, Forms, Menus, PluginsType;
Type
TOnAboutEvent = Procedure(Sender: TObject; This_Module: PPluginModule) Of Object;
TOnConfigEvent = Procedure(Sender: TObject; This_Module: PPluginModule) Of Object;
TOnInitializeEvent = Function(Sender: TObject; This_Module: PPluginModule): Integer Of Object;
TOnTerminateEvent = Function(Sender: TObject; This_Module: PPluginModule): Integer Of Object;
TOnStartEvent = Function(Sender: TObject; This_Module: PPluginModule): Integer Of Object;
TOnStopEvent = Function(Sender: TObject; This_Module: PPluginModule): Integer Of Object;
TPlugin = Class(TObject)
Private
FOnAbout: TOnAboutEvent;
FOnConfig: TOnConfigEvent;
FOnInitialize: TOnInitializeEvent;
FOnTerminate: TOnTerminateEvent;
FOnStart: TOnStartEvent;
FOnStop: TOnStopEvent;
Public
ExeApp: TApplication;
MenuItem: TMenuItem;
LibHandle: THandle;
AddPluginPic: PAddPluginPic_CallBack;
Constructor Create;
Destructor Destroy; Override;
Published
Property OnAbout: TOnAboutEvent Read FOnAbout Write FOnAbout;
Property OnConfig: TOnConfigEvent Read FOnConfig Write FOnConfig;
Property OnInitialize: TOnInitializeEvent Read FOnInitialize Write FOnInitialize;
Property OnTerminate: TOnTerminateEvent Read FOnTerminate Write FOnTerminate;
Property OnStart: TOnStartEvent Read FOnStart Write FOnStart;
Property OnStop: TOnStopEvent Read FOnStop Write FOnStop;
End;
Function Sg_Plugin: PPluginModule; Stdcall;
Var
Plugin: TPlugin;
Implementation
Const
{$I PluginInfo.inc}
Info: TPluginInfo = (
Version: PluginVersion;
Name: PluginName;
Description: PluginDescription;
ModulePath: GetModulePath;
);
Function GetPluginInfo: PPluginInfo; Stdcall;
Begin
Result := @Info;
End;
Procedure SetPluginManagerInfo(PMI: PPluginManagerInfo); Stdcall;
Begin
Plugin.ExeApp := TApplication(PMI^.App);
Plugin.MenuItem := TMenuItem(PMI^.MenuItem);
Plugin.LibHandle := PMI^.LibHandle;
Plugin.AddPluginPic := PMI^.AddPluginPicCallBack;
End;
Procedure SetAbout(This_Module: PPluginModule); Stdcall;
Begin
If Not Assigned(Plugin.FOnAbout) Then Exit;
Plugin.FOnAbout(Plugin, This_Module);
End;
Procedure SetConfig(This_Module: PPluginModule); Stdcall;
Begin
If Not Assigned(Plugin.FOnConfig) Then Exit;
Plugin.FOnConfig(Plugin, This_Module);
End;
Function SetInitialize(This_Module: PPluginModule): Integer; Stdcall;
Begin
Result := S_FALSE;
If Not Assigned(Plugin.FOnInitialize) Then Exit;
Result := Plugin.FOnInitialize(Plugin, This_Module);
End;
Function SetTerminate(This_Module: PPluginModule): Integer; Stdcall;
Begin
Result := S_FALSE;
If Not Assigned(Plugin.FOnTerminate) Then Exit;
Result := Plugin.FOnTerminate(Plugin, This_Module);
End;
Function SetStart(This_Module: PPluginModule): Integer; Stdcall;
Begin
Result := S_FALSE;
If Not Assigned(Plugin.FOnStart) Then Exit;
Result := Plugin.FOnStart(Plugin, This_Module);
End;
Function SetStop(This_Module: PPluginModule): Integer; Stdcall;
Begin
Result := S_FALSE;
If Not Assigned(Plugin.FOnStop) Then Exit;
Result := Plugin.FOnStop(Plugin, This_Module);
End;
Const
DllModule: TPluginModule = (
PluginInfo: GetPluginInfo;
PluginManagerInfo: SetPluginManagerInfo;
About: SetAbout;
Config: SetConfig;
Initialize: SetInitialize;
Terminate: SetTerminate;
Start: SetStart;
Stop: SetStop;
);
Function Sg_Plugin: PPluginModule; Stdcall;
Begin
Result := @DllModule;
End;
{==============================================================================}
Constructor TPlugin.Create;
Begin
Inherited Create;
End;
Destructor TPlugin.Destroy;
Begin
Inherited Destroy;
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -