⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugins.pas

📁 枫叶插件管理器 版本:1.0.0.0 说明: 基于API DLL形式的插件管理器
💻 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 + -