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

📄 global.~pas

📁 Delphi插件程序示例
💻 ~PAS
字号:
unit Global;

interface

uses
  Windows, SysUtils, Classes, Forms;
type
  TPlugIn = class(TObject)
    PlugInID: string;
    PlugInName: string;
    PlugInFile: string;
    Describe: string;
    Node: string;
  end;
  TRunPlugIn = procedure(); stdcall;
  TAddInsFactory = procedure(var PlugInInfo: Pchar);stdcall;



procedure LoadPlugIns();                //装载插件集
procedure LoadPlugIn(sr:TSearchRec);    //装载插件
procedure RunPlugIn(PlugInFileName:string); //运行插件

var
  lstPlugIn: TList;               //先用lstPlugIn的目的是为了方便以后更改主界面时不用修改插件
  PlugIn: TPlugIn;
  i: integer;
implementation


procedure LoadPlugIns();
var
  sr:     TSearchRec;
  Path:   string;
  Found: Integer;
  cPLUGIN_MASK :string;
begin
  cPLUGIN_MASK := '*.dll';         //以扩展名dll为插件后缀
  Path := ExtractFilePath(Application.Exename) + '\AddIns\' ;   //插件存放的目录
   try
    Found := FindFirst(path + cPLUGIN_MASK, 0, sr);
     while Found = 0 do begin
      LoadPlugin(sr);
      Found := FindNext(sr);
     end;
   finally
    FindClose(sr);
   end;
end;


procedure LoadPlugIn(sr: TSearchRec);
var
  LibHandle:     Integer;
  AddInsFactory: TAddInsFactory;
  FileName: string;
  PlugInName: Pchar;
  Describe: Pchar;
  Node: Pchar;
begin
  FileName := ExtractFilePath(Application.Exename) + 'AddIns\' + sr.Name;
  LibHandle := LoadLibrary(PChar(FileName));
   if LibHandle <> 0 then
   begin
    PlugIn := TPlugIn.Create;
    inc(i);
    PlugIn.PlugInID := inttostr(i);
    PlugIn.PlugInFile := sr.Name;
    AddInsFactory := GetProcAddress(LibHandle,PChar('PlugInName'));
    if Assigned(AddInsFactory) then
      begin
        AddInsFactory(PlugInName);
        PlugIn.PlugInName := PlugInName;
      end;
    AddInsFactory := GetProcAddress(LibHandle,PChar('PlugInDescribe'));
    if Assigned(AddInsFactory) then
      begin
        AddInsFactory(Describe);
        PlugIn.Describe := Describe;
      end;
    AddInsFactory := GetProcAddress(LibHandle,PChar('PlugInNode'));
    if Assigned(AddInsFactory) then
      begin
        AddInsFactory(Node);
        PlugIn.Node := Node;
      end;
    lstPlugIn.Add(Pchar(PlugIn));
   end;
end;

procedure RunPlugIn(PlugInFileName:string);
var
  LibHandle:     Integer;
  RunPlugIn: TRunPlugIn;
  FileName: string;
begin
  FileName := ExtractFilePath(Application.Exename) + 'AddIns\' + PlugInFileName;
  LibHandle := LoadLibrary(PChar(FileName));
   if LibHandle <> 0 then
   begin
    RunPlugIn := GetProcAddress(LibHandle,PChar('RunPlugIn'));
    if Assigned(RunPlugIn) then
      begin
        RunPlugIn;
      end;
   end;
end;

initialization
  lstPlugIn := TList.Create;
  i := 0;
  
finalization
  while lstPlugIn.Count<>0 do
  begin
    PlugIn := lstPlugIn.Items[0];
    PlugIn.Free;
    lstPlugIn.Delete(0);
  end;
  lstPlugIn.Free;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -