C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[22144] Re: 제 생간엔 박지훈님이 잘못 알고 계신 것 같은데요 ^^
카라얀 [lovekorea] 6845 읽음    2012-12-07 13:57
박지훈.임프 님이 쓰신 글 :
: 포럼에는 댓글 알림 기능이 없어서... (안만든 놈이 바로 저... --;;)
: 한달 넘게 전에 댓글 다신 것을 이제야 봤습니다. 좋은 고견 감사드리구요.
:
: 근데, 제 생각에는 빌더님이 잘못 알고 계신 것 같아서, 추가로 제 생각을 댓글로 썼습니다.
: 혹시 제 논리가 틀린 것 같으면 지적 부탁드립니다.  ^^;;;;
:
: http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=290


자세한 설명은 빌더님께서 답변해주시겠지만 VCL 초기화 과정을 잠간 살펴 본 바로는 오히려 박지훈님이 잘못 알고 계신 것 같습니다. ^^

실행파일의 경우 VCL의 초기화 과정은 SysInit.pas의 _InitExe 부터 시작하는데, 64비트 예외처리 방식은 저도 그런게 있다는 것만 알고 있고 자세한 내용은 몰라서 32비트 예외처리로 한정해서 살펴 보면, _InitExe에서 System.pas의 _StartExe를 호출하는데, 여기서 이미 예외처리를 위한 셋업이 이루어 집니다. 스텍프레임 방식으로 예외를 처리하기 위한 프레임을 구성한 후, System.pas의 InitUnits를 호출하는데, InitUnits에서 하는 일은 링크시 포함되는 유닛들의 Initialization 섹션들을 호출해서 초기화 하는게 전부 입니다.


_StartExe에서 이미 예외처리를 위한 셋업이 되어 있기 때문에

각기 유닛들의 Initialization 섹션을 호출해서 초기화 하는 InitUnits 는 다음과 같이 try... except 블럭을 사용할 수 있게 됩니다.

try
    while I < Count do
    begin
      P := Table^[I].Init;
      Inc(I);
      InitContext.InitCount := I;
      if Assigned(P) and Assigned(Pointer(P^)) then
      begin
{$IF defined(MSWINDOWS)}
        TProc(P)();
{$ELSEIF (defined(POSIX) and defined(CPUX86))}
        CallProc(P, InitContext.Module^.GOT);
{$ELSE}
        TProc(P)();
{$ENDIF}
      end;
    end;
  except
    FinalizeUnits;
    raise;
  end;

SysUtils.pas의 Initialization 섹션을 포함한 모든 유닛들의 Initailization 코드들은 이미 예외처리가 동작하는 상황에서 호출이 됩니다.
그리고 SysUtils.pas의 Initialization 섹션에서는 예외처리와 관련한 코드가 전혀 없습니다.

빌더님이 말씀하신 대로 SysUtils.pas와 상관없이 이미 System.pas에서 예외처리를 위한 셋업이 완료되고, 그 이후에 추가로 설치되는 예외핸들러는 System.pas에서 핸들링되는 예외처리에 대한 세컨드, 서드 식의 Chained 예외 핸들러에 불과할 뿐이죠.

제 생각엔 오히려 박지훈님이 잘못 알고 계신 것 같은데요 ^^

+ -

관련 글 리스트
22139 빌더님께... 박지훈.임프 5207 2012/12/06
22144     Re: 제 생간엔 박지훈님이 잘못 알고 계신 것 같은데요 ^^ 카라얀 6845 2012/12/07
22145         Re:Re: 제 생간엔 박지훈님이 잘못 알고 계신 것 같은데요 ^^ 박지훈.임프 5071 2012/12/07
22146             Re:Re:Re: 제 생간엔 박지훈님이 잘못 알고 계신 것 같은데요 ^^ 카라얀 5803 2012/12/07
22147                 Re:Re:Re:Re: 제 생간엔 박지훈님이 잘못 알고 계신 것 같은데요 ^^ 박지훈.임프 6432 2012/12/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.