(会者不难)这段调用dll文件的程序为什么报错?一定给分! (200分)

  • 主题发起人 主题发起人 allenjiang
  • 开始时间 开始时间
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.

多谢大家!
 
主程序的dpr单元也要用shareMem,
将borlndmm.dll拷到应用程序所在目录。
 
i don't known,but i can up for you
!
 
最好别用string
 
pchar
shortsring
array [1..1000] of char
 
后退
顶部