我用FASTREPORT做了一个报表,其中用到了一个Dataset,我把它编译成.EXX文件,使用正常,但是我将它转换成一个DLL文件,我在另一个程序中调用这个DLL,在第一次预览时正常,但是我再次预览时就抱错“not valid pointer”.
还请高手解答!

解决方案 »

  1.   

    不知道你的这个DLL报表的接口是怎么写的
    还有调用的参数及模块的创建方式是动态还是静态加载的
    你写清楚一点
    我做过的都是DLL报表
    在VB写的程序来调用
    一切正常
      

  2.   

    以下是我的调用的函数
    procedure workajdy(AppHandle: TApplication;AUser_Name,AUser_LoginID,Fjcs: string); stdcall;
    begin
      Application := AppHandle;
      Zt := Trim(Fjcs);
      if FrmAjDy = nil then
      begin
        Application.CreateForm(TFrmAjDy,FrmAjDy);
      end
      else
      begin
        if FrmAjDy.WindowState = wsMinimized then
          FrmAjDy.WindowState := wsNormal;
      end;
      FrmAjDy.Show;
    end;
    报表是放在FrmAjDy上,我的DLL的Exports 的函数就是workajdy
    然后我是用loadlibary(mydll),然后再用GetProcAddress调用
    对了,我在报表里还有用到Shape对象,我看过FR的DEMO,它的DLL的DEMO没有用到SHAPE和DATASET运行正常.
      

  3.   

    如果你在DLL中传递VCL定义的类型作为参数,则必须在DLL头部引用ShareMem单元(一定要第一个引用)
      

  4.   

    我加过了没有用,还是同样的错误,有时是'not valid pointer',有时是访问内存地址出错,我跟踪过SHOWREPORT的过程,以下是ShowPreparedReport的源码
    procedure TfrReport.ShowPreparedReport;
    var
      s: String;
      p: TfrPreviewForm;
    begin
      CurReport := Self;
      MasterReport := Self;
      DocMode := dmPrinting;
      CurBand := nil;
      if EMFPages.Count = 0 then Exit;
      s := frLoadStr(SPreview);
      if Title <> '' then s := s + ' - ' + Title;
      if not (csDesigning in ComponentState) and Assigned(Preview) then
        Preview.Connect(Self)
      else
      begin
        if csDesigning in ComponentState then
          p := TfrPreviewForm.Create(nil) else  //第一次预览一切正常,
          p := TfrPreviewForm.Create(Self);   //第二次预览到这里出错
        if MDIPreview then                    //我怀疑是程序handle传递错
        begin
          p.WindowState := wsNormal;
          p.FormStyle := fsMDIChild;
        end;
        p.Caption := s;
        p.Show_Modal(Self);
        Application.ProcessMessages;
      end;
    end;
      

  5.   

    加个TRY。
           FINALY
    试试
      

  6.   

    收到FastReport的作者的解释是在DLL应用方面结合DATASET会有些问题。唉,帖子结束,谢谢各位