📄 global.~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 + -