Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14577] Re:답변 감사드립니다.
gomsun2 [vhrvnd723] 1947 읽음    2013-01-17 11:59
안녕하세요 박태성님.

Create 절은 클래스로 오브젝트를 생성할 때 호출됩니다.
반면 initialization 절은 해당 유닛이 로드 될때 호출됩니다.

행위는 동일하다고 보시면 됩니다.

올려주신 코드랑 본문의 글을 보고 원하신는 바가 이런것이 아닐까 생각하고 테스트 해보았습니다.

1. Initialization 절에서 작성하신 Class로 FExcelProc 오브젝트 생성, 그과정에서 ExcelApp를 할당하였습니다.
2. MainForm에서 ExcelApp의 할당 여부를 Caption에 찍었습니다.

그럼...

unit Unit19;

interface

uses
  SysUtils, Classes;

Type
  TExcelProc = class(TObject)
  protected
  public
    constructor Create;
    destructor Destroy; override;
  end;

var
  ExcelApp : OleVariant;

implementation

uses
  ComObj, Dialogs, Variants;

var
  FExcelProc: TExcelProc;

{ TExcelProc }

constructor TExcelProc.Create;
begin
  inherited Create;
  try
    ExcelApp := GetActiveOleObject('Excel.Application');
  except
    try
      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
  FExcelProc := TExcelProc.Create;

finalization
  FreeAndNil(FExcelProc);

end.


MainForm
unit Unit18;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm18 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form18: TForm18;

implementation

{$R *.dfm}

uses
  Unit19;

procedure TForm18.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutdown := True;

  Caption := BoolToStr(VarIsEmpty(ExcelApp), True);
end;

end.


박태성 님이 쓰신 글 :
: gomsun2 님이 쓰신 글 :
: : CoInitialize를 호출 하셨나요 ?
:  uses
:    ActiveX;
:  
:  initialization
:    CoInitialize(nil);
:  
:  finalization
:    CoUnInitialize; 
:  end.
:  

:
: 말씀해주신대로 해봐도 같은 현상이 발생하는것 같습니다. 일단은 클래스를 생성하는 방식으로 해서
: 프로젝트를 계속 진행할까 합니다.
:
: 다시 한번 더 답변 감사드립니다.

+ -

관련 글 리스트
14563 Unit에서 OLE 객체를 생성할 때 박태성 1963 2013/01/15
14564     Re:Unit에서 OLE 객체를 생성할 때 gomsun2 2134 2013/01/16
14565         답변 감사드립니다. 박태성 1973 2013/01/16
14577             Re:답변 감사드립니다. gomsun2 1947 2013/01/17
14580                 답변 감사드립니다. 박태성 1854 2013/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.