delphi动态调用DLL时没有出错,但用freelibrary释放时却出现内存读写错误,这是什么原因呢,请高手指教。

解决方案 »

  1.   

    procedure TForm1.Button3Click(Sender: TObject);
    type
        Tf=procedure(var s:pchar);stdcall;
      var
        fh:thandle;
        tp:tfarproc;
        s:pchar;
    begin
      fh:=loadlibrary('Project2.dll');
      if fh>0 then
      begin
        try
          tp:=getprocaddress(fh,pchar('getstringfromdll'));
          if tp<>nil then
          begin
            //s:=stralloc(80);
            //s:=strpcopy(s,'ok');
            tf(tp)(s);
            self.Caption:=string(s);
          end;
        finally
          freelibrary(fh);//到这步才出错
        end;
      end;
    end;
      

  2.   

    那应该怎么办,如何申请?这样吗?
    s:=stralloc(80);
      

  3.   

    看s需要多大的缓冲区。设为len.GetMem(s,len);
      

  4.   

    up,我也碰到过此类问题  gz
      

  5.   

    使用 GetMem(s,len);对变量分配内存,这个过程不用 freelibrary(fh); 它是个局部变量,调用完后自动free了;可以试试;
      

  6.   

    我屏蔽掉freelibrary(fh);后果然没错,但是书里的例子也是这样子调用的
      

  7.   

    哦,刚才我看一下DLL,原来我引用了sharemem单元,我把sharemem删了就没问题了,为什么会这样呢??