本人用delphi开发系统,初次使用bpl,遇到此问题,请高手指教主程序调用bpl框架(bpl里是frame)其中bpl中使用了Dev Express 6中的cxGrid控件,没有任何问题,但希望能导出grid内容,uses cxGridExportLink;导出按钮中代码:ExportGridToexcel('d:\aaa.xls',gidPayment,False,true,true);编译,调用都没有出错,但按导出按钮即出现以下错误Access violation at address 00000000 read of address 00000000但如果直接在程序中,不使用bpl框架即正常。注:如能解决,分数不是问题,希望高手出现

解决方案 »

  1.   

    通常地址错误都是了已经free掉或未create的对象,或是指针指向了非法的地址.你的程序里没有直接地址操作,那就一定是调用对象的时候它不存在.调试的时候看哪句报错,检查这句代码里的所有对象哪个没有存在或已经free了就ok了。 
      

  2.   

    因為寫的代碼有誤,所以報內存的錯誤cxgrid導出代碼如下:uses cxGridExportLink;
    procedure TRes_Hr_Report_F.E2Click(Sender: TObject);
    begin
      inherited;
      if qry_all.IsEmpty then
      begin
        MessageBox(Handle,'數據不能為空!!!','數據導出...',MB_OK+ MB_ICONWARNING);
        Exit;
      end else
      begin
        if dlgSave1.Execute then
        begin
          ExportGridToExcel(dlgSave1.FileName,cxGrid1,True,True,False,'XLS');
          MessageBox(Handle,'數據成功導出!!!','數據導出...',MB_OK+ MB_ICONWARNING);
        end;
      end;
    end;
      

  3.   

    用LoadPackage.....把BPL加载到程序中。。
      

  4.   

    1、把 bpk 中的 Contains Requires 里的内容全部删除。
    然后再添加回来你写的几个 pas。
    Build 一下。看看是不是ok。
    2、主程序里,Build with package 去掉(干脆把 bpl 加进来看看)是否ok?第一,说明某些dcp没有添加,借由此方法自动加之。
    第二,说明你的bpl是否有良好的代码风格。可以同是支持静态动态加载。
      

  5.   

    多谢楼上几位的回复,问题其实大致清楚,但就是无比奇怪,最好意外解决了把create 过程注释掉,编译一下;
    然后再把注释去掉再编译一下,居然就好了真是大跌眼镜