忘了写问题了 呵呵
在buttonclick 里直接处理写过程还能执行(虽然出了一堆非法错误),而buttonclick 调用这个动态连接库则完全不执行,一点就出Fetal error access   violation address 0x0000000!!!

解决方案 »

  1.   

    做如下更改试试
    uses
      ShareMem,
      SysUtils,
      Classes,
      Windows,
      Db,
      Excel2000,
      OleServer,  OleCtrls;
     
     Comobj;//引用
    {$R *.res}procedure IntoExl(app1:TComponent;DataSet1:TDataSet;FileName1,Title:string);stdcall;
    var
      ExcelApplication1:TExcelApplication;
      ExcelWorksheet1:TExcelWorksheet;
      ExcelWorkbook1:TExcelWorkbook;
      i,j:integer;
      filename:string;
      Sheet:Variant;
    begin
      filename:=concat(filename1,'.xls');
      try  //建立Excel 对象
        ExcelApplication1.Create(app1);
        ExcelWorksheet1.Create(app1);
        ExcelWorkbook1.Create(app1);
        ExcelApplication1.Connect;
      except
        MessageBox(0,'Excel2000 未安装!','错误',mb_ok+mb_iconerror);
        abort;
      end;  try //建立Excel 表
        ExcelApplication1.Workbooks.Add(EmptyParam,0);
        Excelworkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);         Excelworksheet1.ConnectTo(Excelworkbook1.Activesheet as _worksheet);
         sheet:=ExcelWorkBook1.ActiveSheet;
        DataSet1.First;
        for j:=0 to DataSet1.Fields.Count - 1 do
          begin
            sheet.Cells.item[3,j + 1] := DataSet1.Fields[j].DisplayLabel;
            sheet.Cells.item[3, j + 1].font.size := '10';
          end;    for i := 4 to DataSet1.RecordCount + 3 do
          begin
            for j := 0 to DataSet1.Fields.Count - 1 do
              begin
                sheet.Cells.item[i, j + 1] :=DataSet1.Fields[j].Asstring;
                sheet.Cells.item[i, j + 1].font.size := '10';
              end;
            DataSet1.Next;
          end;    sheet.Columns.AutoFit;
        sheet.Cells.item[1, 2] := Title;
        sheet.Cells.Item[1, 2].font.size := '14';
        sheet.SaveAs(filename);
        Messagebox(0,PChar('数据成功导出!' + filename), '提示',mb_Ok);  finally
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
        ExcelApplication1.Free;
        ExcelWorksheet1.Free;
        ExcelWorkbook1.Free;  end;
    end;exports
      IntoExl ;begin
    end.
      

  2.   

    unit Unit1;interfaceuses
        ...Comobj,Excel2000, OleServer;
    type
      TForm1 = class(TForm)
        ...
        Button1: TButton;
        ExcelApplication1: TExcelApplication;
        ExcelWorksheet1: TExcelWorksheet;
        ExcelWorkbook1: TExcelWorkbook;
    ...
    implementation{$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    var  i,j:integer;begin    ExcelApplication1.Create(Application);
    ...以上是在button click 直接写处理过程,执行中没有问题,用 try except 也发现不了问题,但一关闭程序 就会出现“ '0x004064f6'指令引用'0x000035c'内存。该内存不能为'read' 。”
    及'Application error'.
      

  3.   

    直接用Connect ok!
    不过动态连接库还是不行,exception( Excel2000 未安装!), 怀疑是声明的问题 在直接处理时是在Form 中加了关于Excel的几个组件(Delphi 6提供的servers page 中office2k的控制组件),而在dll中不能直接加组件,自己声明的好像有问题吧? 搞不清楚library DataSetIntoExl;
    uses
      ShareMem,
      SysUtils,
      Classes,
      Windows,
      Db,
      comobj,
      Excel2000,
      OleServer,
      OleCtrls;{$R *.res}procedure IntoExl(DataSet1:TDataSet;FileName1,Title:string);stdcall;
    var
      ExcelApplication1:TExcelApplication;
      ExcelWorksheet1:TExcelWorksheet;
      ExcelWorkbook1:TExcelWorkbook;
      i,j:integer;
      filename:string;
    begin
      filename:=concat(filename1,'.xls');
      try  //建立Excel 对象    ExcelApplication1.Connect;
      except
        MessageBox(0,'Excel2000 未安装!','错误',mb_ok+mb_iconerror);
        abort;
      end;  try //建立Excel 表
        ExcelApplication1.Workbooks.Add(EmptyParam,0);
      

  4.   

    Form 好像也可以稍作修改,变成一个dll
    哪位高手,调试调试那个dll,没办法只好把form 改成dll 了