unit uExcelOut;
interface
uses
SysUtils, Classes;
Type
TExcelProc = class(TObject)
protected
public
constructor Create;
destructor Destroy; override;
end;
var
ExcelApp : OleVariant;
implementation
uses
ComObj, Dialogs, Variants;
{ TExcelProc }
constructor TExcelProc.Create;
begin
inherited Create;
try
ExcelApp := GetActiveOleObject('Excel.Application');
except
try
// If no instance of Word is running, try to Create a new Excel Object
ExcelApp := CreateOleObject('Excel.Application');
except
ShowMessage('Cannot start Excel/Excel not installed ?');
Exit;
end;
end;
end;
destructor TExcelProc.Destroy;
begin
if not VarIsEmpty(ExcelApp) then
begin
ExcelApp.DisplayAlerts := False; // Discard unsaved files...
ExcelApp.Quit;
ExcelApp := Unassigned;
end;
inherited Destroy;
end;
initialization
finalization
end.
엑셀객체를 다루는 루틴을 폼에서 분리할려고 위와 같이 유닛을 생성했습니다.
처음에는 클래스의 생성자에 있던 구문은 유닛의 initialization 색션에 Destroy절에 있는 구문은 finalization 섹션에
넣어서 유닛만 폼의 uses절에 넣어서 실행을 하니 다운이 되어 버려서 위처럼 클래스를 하나 만들고 그 속에
집어 넣어니까 에러없이 작동을 합니다.
짧은 생각에는 initialization 에 변수를 할당하는 작업을 해도 될것 같은데 왜 에러가 나는지를
모르겠네요. initialization 섹션에 코드를 넣은것과 create절에 코드를 넣는게 어떤 차이가 나는건지요?
|