我正在写一个使用插件的程序,当加载了不符合要求的dll文件时却无法释放dll文件,
下面是示例代码,请各位看看原因出在什么地方.procedure TForm1.Button1Click(Sender: TObject);
var
dllopened:boolean;//标记dll文件是否打开
erred:boolean; //是否发生了错误
dh:cardinal; //dll文件句柄
fh:pointer; //函数地址
begin
dllopened:=false;
erred:=true;
try
dh:=loadlibrary('g:\delphi6\delphimm.dll');
//也可以用其他的没有导出myfunc函数的dll文件
if dh>0 then
begin
dllopened:=true;
fh:=getprocaddress(dh,'myfunc');
if assigned(fh) then
erred:=false;
end;
finally
if (dllopened and erred) then
freelibrary(dh);//程序执行到这里就死了,为什么???
end;
end;
下面是示例代码,请各位看看原因出在什么地方.procedure TForm1.Button1Click(Sender: TObject);
var
dllopened:boolean;//标记dll文件是否打开
erred:boolean; //是否发生了错误
dh:cardinal; //dll文件句柄
fh:pointer; //函数地址
begin
dllopened:=false;
erred:=true;
try
dh:=loadlibrary('g:\delphi6\delphimm.dll');
//也可以用其他的没有导出myfunc函数的dll文件
if dh>0 then
begin
dllopened:=true;
fh:=getprocaddress(dh,'myfunc');
if assigned(fh) then
erred:=false;
end;
finally
if (dllopened and erred) then
freelibrary(dh);//程序执行到这里就死了,为什么???
end;
end;
把它去了就可以了
dh:=loadlibrary('g:\delphi6\delphimm.dll');
//也可以用其他的没有导出myfunc函数的dll文件
if dh>0 then
begin
dllopened:=true;
fh:=getprocaddress(dh,'myfunc');
if assigned(fh) then
erred:=false;
end;
freelibrary(dh);