A
allenjiang
Unregistered / Unconfirmed
GUEST, unregistred user!
[]这是dll文件:
library Plugin1;
uses
ShareMeM, SysUtils, Classes;
{$E oce}
procedure Describe(var s:string);export; stdcall;
begin
s:='test';
end;
exports
Describe;
begin
end.
这是主程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TDescribe=procedure(var s:string);stdcall;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LoadPlugins;
procedure LoadPlugin(FileName:string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.LoadPlugins;
var
sr:TSearchRec;
path:string;
Found:Integer;
begin
path:=ExtractFilePath(Application.ExeName);
try
begin
Found:=FindFirst(path+'*.dll',0,sr);
while found=0 do
begin
LoadPlugin(sr.Name);
found:=FindNext(sr);
end;
// 如果只执行一次 LoadPlugin(sr.Name); 就不报错!放在循环内就不行!
end
finally
FindClose(sr);
end;
end;
procedure TForm1.LoadPlugin(Filename:string);
var
ilibHandle:HMODULE;
pDescribe:TDescribe;
s:string;
begin
ilibHandle:=LoadLibrary(PChar(FileName));
if iLibHandle<>0 then
begin
try
pDescribe:=GetProcAddress(iLibHandle,Pchar('Describe'));
if Assigned(pDescribe) then
begin
pDescribe(s);
ShowMessage(s);
end
finally
freelibrary(iLibHandle);
end
end
else
showmessage('error');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadPlugins;
end;
end.
多谢大家!
library Plugin1;
uses
ShareMeM, SysUtils, Classes;
{$E oce}
procedure Describe(var s:string);export; stdcall;
begin
s:='test';
end;
exports
Describe;
begin
end.
这是主程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TDescribe=procedure(var s:string);stdcall;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LoadPlugins;
procedure LoadPlugin(FileName:string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.LoadPlugins;
var
sr:TSearchRec;
path:string;
Found:Integer;
begin
path:=ExtractFilePath(Application.ExeName);
try
begin
Found:=FindFirst(path+'*.dll',0,sr);
while found=0 do
begin
LoadPlugin(sr.Name);
found:=FindNext(sr);
end;
// 如果只执行一次 LoadPlugin(sr.Name); 就不报错!放在循环内就不行!
end
finally
FindClose(sr);
end;
end;
procedure TForm1.LoadPlugin(Filename:string);
var
ilibHandle:HMODULE;
pDescribe:TDescribe;
s:string;
begin
ilibHandle:=LoadLibrary(PChar(FileName));
if iLibHandle<>0 then
begin
try
pDescribe:=GetProcAddress(iLibHandle,Pchar('Describe'));
if Assigned(pDescribe) then
begin
pDescribe(s);
ShowMessage(s);
end
finally
freelibrary(iLibHandle);
end
end
else
showmessage('error');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadPlugins;
end;
end.
多谢大家!