{主程序} 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.