library Excel;uses
  ShareMem, SysUtils, Classes, Excel97, ComObj, DBTables;{$R *.RES}procedure ExportToExcel; stdcall;
var
  xlApp: ExcelApplication;
  AWorkbooks: Workbooks;
  AWorkbook: ExcelWorkbook;
  AWorksheets: Sheets;
  AWorksheet: ExcelWorksheet;
  ARange: Range;
  i, j: Integer;
  ADataSet: TTable;
begin
  try
    xlApp := CreateOleObject('Excel.Application') as ExcelApplication;
  except
    on E: Exception do
      raise Exception.Create(E.Message);
  end;
  AWorkbooks := xlApp.Workbooks;
  AWorkbook := AWorkbooks.Add(xlWorksheet4, 0);
  AWorksheets := AWorkbook.Worksheets;
  AWorksheet := AWorkSheets.Get_Item(1) as ExcelWorksheet;
  AWorksheet.Name := 'Using Delphi to control Excel. ';  AWorksheet.Activate(0);
  ARange := AWorksheet.Range['C1', 'C1'];
  ARange.Select;
  ARange.ColumnWidth := 20;
  AWorksheet.Cells.Item[1, 3].Value := 'Wish you success!  ';  ADataSet := TTable.Create(nil);
  try
    ADataSet.DatabaseName := 'DBDemos';
    ADataSet.TableName := 'Country.db';    with ADataSet do
    begin
      Active := True;      try
        for i := 0 to ADataSet.FieldCount-1 do
          AWorksheet.Cells.Item[3, i+1].Value := ADataSet.Fields[i].FullName;        First;
        i := 4;
        while not Eof do
        begin
          Inc(i);
          for j := 0 to FieldCount-1  do
            AWorksheet.Cells.Item[i, j+1] := Fields[j].AsString;
          Next;
        end;
      finally
        Active := False;
      end;
    end;
  finally
    FreeAndNil(ADataSet);
  end;
end;exports
  ExportToExcel;begin
end.

解决方案 »

  1.   

    DLL的初始化和结束化    
        
    利用DllProc变量  和ExitProc一样,DllProc也是一个在Systemd单元中预定义的变量。在使用DLLProc时, 必须先写好一个具有以下原型的程序:  procedure DLLHandler(Reason: integer);并在library的begin..end.之间, 将这个DLLHandler程序的执行地址赋给DLLProc中, 这时就可以根据参数Reason的值分别作出相应的处理。另外注意要将Windows单元加入uses子句。示例如下:  library TestDLL;  ...  procedure MyDLLHandler(Reason: integer);  begin   case Reason of    DLL_Process_Attach:CoInitialize  //整个DLL的初始化代码    DLL_Process_Detach: //整个DLL的善後程序    DLL_Thread_Attach: //当主叫端开始一个Thread时    DLL_Thread_Detach: //当主叫端终止一个Thread时   end;  end;  ...  begin  ... //初始化代码  DLLProc := @MyDLLHandler;  MyDLLHandle(DLL_Process_Attach);  end.
     
     
    记得工程中添加ActiveX单元。
      

  2.   

    提示已經很清楚了:
    你在dll中使用ActiveX, 必須用 CoInitialize(nil) 先進行初始化!!!
      

  3.   

    加一单元initialization
      ActiveX.CoInitialize(nil);finalization
      ActiveX.CoUninitialize;我已经搞定.
    谢谢.