我正在写一个使用插件的程序,当加载了不符合要求的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;

解决方案 »

  1.   

    问题出在这了if (dllopened and erred) then
    把它去了就可以了
      

  2.   

    这样都可以了
    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);