把代码贴出来呀,还有把Acaption改为PCahr类型的。

解决方案 »

  1.   

    绝对是参数传递过程中,内存范围越界了,最大的可能就是那个String类型的参数出问题。把代码贴出来,这样才能看出哪儿的问题。
      

  2.   

    是否未释放先前的表, 便再开启var fm :Tform1;..fm := Tform1.create(self);try
      fm.showmodal;
      ........
    finally
      fm.free;
    end;
      

  3.   

    非delphi高手恐怕解决不了?
      

  4.   

    很简单的问题,肯定是没有正确释放 Form !!!!!!!!!!!!!!
      

  5.   

    不贴出来,Inprise公司的人也无法解决。
      

  6.   

    傻帽,在Delphi建立DLL工程的最前面有一段注释,你看了吗?
    你的参数或返回值里使用了String,或者参数或返回值的类里使用了string属性。你都会出现这个问题,解决的办法是在DLL和应用工程的第一个引用单元加上ShareMem就可以了,这是你的程序就依赖于BorlandMM.DLL,记者一起分发哦!
      

  7.   

    DLL里的函数是
    function  showmodal(Ahandle:Thandle;Acaption:string;Datas:TDataSource):BOOL;
    var  searchfrm:Tsearchfrm;     I:integer;
    begin
        application.Handle:=Ahandle;
        searchfrm :=Tsearchfrm.Create(application);
        try
          searchfrm.Caption:=Acaption;
          searchfrm.DBGrid1.DataSource:=Datas;
          searchfrm.findfield.Clear;
          searchfrm.StrL:=Tstringlist.create;
        for i:=0 to searchfrm.DBGrid1.DataSource.DataSet.FieldCount-1 do
        begin
          searchfrm.findfield.Items.Add(searchfrm.dbgrid1.DataSource.DataSet.Fields[i].DisplayName);
          searchfrm.StrL.Add(searchfrm.dbgrid1.DataSource.DataSet.fields[i].fieldname);
        end;
        Searchfrm.findfield.ItemIndex:=0;
        Searchfrm.findvalue.Text:='';
        searchfrm.ShowModal;
        result:=False;
        finally
         searchfrm.Strl.free;
         searchfrm.findfield.Clear;
         searchfrm.DBGrid1.DataSource:=nil;
         searchfrm.Free;
        end;
    end;
    form 里是这样调用的procedure TForm1.Button1Click(Sender: TObject);
    var libHandle:Thandle;
         showmodal:Tshowmodal;
    begin
        application.Title:='DLL测试';
        libHandle:=Loadlibrary('psearch.dll');
        try
         if libHandle=0 then
         raise  EDLLLoadError.Create('无法成功转载DLL');
         @showmodal:=Getprocaddress(libHandle,'showmodal');
         if not (@showmodal=nil) then
         showmodal(application.handle,'DLL测试',datasource1)
         else
         raiselastwin32error;
         finally
    //       showmodal(application.handle,'DLL测试',nil);
          freelibrary(libhandle);
         end;
    end;