delphi 开发扩展,一

{主程序}

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.