{主程序}
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;
type
TPluginName = Function:string; stdcall;
TShowPerSN = function(AHandle:THandle;ADOConn:TADOConnection;ACaption:String):BOOL;StdCall;
type
TForm2 = class(TForm)
ListBox1: TListBox;
ADOConnection1: TADOConnection;
procedure FormCreate(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
private
LibHandle: HMODULE;
procedure LoadPlugins;
procedure LoadPlugin(sr: TSearchRec);
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
LibHandle:=0;//初始化LibHandle的值。
LoadPlugins;//调入LoadPlugins过程。
end;
procedure TForm2.LoadPlugins;
var
sr: TSearchRec;
path: string;
Found: Integer;
begin
path := ExtractFilePath(Application.Exename);
try
Found := FindFirst(path + '*.DLL', 0, sr);
while Found = 0 do//查找文件。
begin
LoadPlugin(sr);
Found := FindNext(sr);
end;
finally
FindClose(sr);
end;
end;
procedure TForm2.ListBox1DblClick(Sender: TObject);
var k:TPluginName;ShowPerSN:TShowPerSN;
begin
if ListBox1.ItemIndex<>-1 then
begin
if LibHandle<>0 then
FreeLibrary(LibHandle);
LibHandle:= LoadLibrary(Pchar(self.ListBox1.Items[self.ListBox1.ItemIndex]));
if LibHandle <> 0 then
begin
try
@k:= GetProcAddress(LibHandle, 'GetName');
self.Text:=k;
@ShowPerSN:= GetProcAddress(LibHandle,'GetForm');
if not (@ShowPerSN = nil) then
begin
ShowPerSN(application.Handle,ADOConnection1,'');
Invalidate;
end;
Except
FreeLibrary(LibHandle);
LibHandle:=0;
end;
end
else
ShowMessage('loading Dll file error!');
end;
end;
procedure TForm2.LoadPlugin(sr: TSearchRec);
var
iLibHandle: HMODULE;
begin
iLibHandle := LoadLibrary(Pchar(sr.Name));
if iLibHandle <> 0 then
begin
try
ListBox1.Items.Add(sr.Name);
finally
FreeLibrary(iLibHandle);
end;
end else
ShowMessage('loading Dll file error!');
end;
end.