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

C++빌더 Q&A
C++Builder Programming Q&A
[66494] Re: System.pas 컴파일한거 참고하세요
빌더(TWx) [builder] 1762 읽음    2012-03-03 09:03
델파이.컨설턴트 님이 쓰신 글 :
: 델파이 컨설턴트로 일하고 있는 사람입니다.
: System.pas는 델파이와 C++빌더에서 심장 역할을 하는 중요한 코드입니다.
: 개발자들이 참고하라고 소스만 공개해주고 있을 뿐입니다.
: System.pas는 엠베카데로 내부 엔지니어들 아니면 컴파일 하는게 불가능 합니다.
:
:
:
:
: cubase 님이 쓰신 글 :
: : 안녕하세요
: : RAD XE2 사용하고 있습니다. System.pas 소스 수정해서 컴파일해야 하는데 별짓 다해봐도 컴파일이 안되네요
: :
: : 처음에 System.pas 파일명으로 컴파일이 안되길래 파일명을 _System.pas로 하니까 컴파일이 되는듯 하더니
: : 이번에는 이런 에러가 뜹니다
: :
: : [DCC Error] _System.pas(312): E2572 RTTI visibility set constant expression of type System.TRttiVisibility
: : expected.
: :
: : 큐베이스라는 음악제작 프로그램에서 플럭인 만들려고 하는데 DSP 연산 처리에 문제가 있어서 찾아 보니까
: : C++빌더에서 사용할 땐 코프로세서를 패치해줘야 한다고 하더군요.
: :
: : System.pas 라인넘버 31830 부분의 코드를
: :
: : [수정전]
: :
: :   _InitializeControlWord;
: :   _FpuInit();
: :
: :   TTextRec(Input).Mode := fmClosed;
: :   TTextRec(Output).Mode := fmClosed;
: :   TTextRec(ErrOutput).Mode := fmClosed;
: :
: :
: : [수정후]
: :
: :   _InitializeControlWord;
: :   _FpuInit();
: :
: : int patch = 0x33f;
: :
: : OutputDebugString('co-processor patched...');
: : asm
: : {
: :         FNINIT
: :         FWAIT
: :         FLDCW   [patch]
: : }
: :   TTextRec(Input).Mode := fmClosed;
: :   TTextRec(Output).Mode := fmClosed;
: :   TTextRec(ErrOutput).Mode := fmClosed;
: :
: : 저렇게 수정해서 컴파일 해야하는데 방법이 없을까요. 컴파일해서 VCL 라이브러리 파일을 바꿔서 사용해야
: : 하는데 도움 좀 부탁드리겠습니다. OutputDebugString은 System.pas가 패치가 됐나 확인차 필요합니다.
: : 고수님님들 도와주세요.






답변:


프로그래밍 처음 시작하는 학생 같았으면 굳이 이런 말 할 필요도 없었을 텐데, 한마디 안할 수가 없네요.
데놓고 자칭 "델파이.컨설턴트"라고 하는 사람이 그렇게 근거도 없는 글을 함부로 올려도 되는 겁니까.
누가 컴파일이 불가능하다고 합디까. --;


: :
: :   _InitializeControlWord;
: :   _FpuInit();
: :
: : int patch = 0x33f;
: :
: : OutputDebugString('co-processor patched...');
: : asm
: : {
: :         FNINIT
: :         FWAIT
: :         FLDCW   [patch]
: : }
: :   TTextRec(Input).Mode := fmClosed;
: :   TTextRec(Output).Mode := fmClosed;
: :   TTextRec(ErrOutput).Mode := fmClosed;

위와 같이 수정하면 Co-Processor를 초기화 해버려서 RTL 프레임웍을 사용하는 데 문제가 발생할 수 있습니다.
(Default8087CW 라는 내부 변수가 사용되고 있음) 그래서 소스를 아래와 같은 식으로 수정해서 컴파일 했으니까
참고하세요.


<System.pas> 수정된 소스
  _InitializeControlWord;
  _FpuInit();

  OutputDebugString('=====================================');
  OutputDebugString('  [PATCH] : coprocessor patched....');
  OutputDebugString('=====================================');

  // Patch CoProcessor 
  asm
        mov ax, Default8087CW
        or  ax, $33F
        mov Default8087CW, ax
        fldcw  Default8087CW
        fwait
  end;


  TTextRec(Input).Mode := fmClosed;
  TTextRec(Output).Mode := fmClosed;
  TTextRec(ErrOutput).Mode := fmClosed;


...

Embarcadero 에서 제공하는 라이브러리를 교체해 버릴 수도 있지만, 오히려 필요할 때만 링크해서 사용할 수 있게
obj 파일로 관리하는게 더 편리할 겁니다. 소스를 수정해서 컴파일한 System.obj 파일을 첨부하니까 필요한 프로젝트
에 다음과 같이 링크만 걸어주면 됩니다.



...

컴파일해서 실행하면 RAD XE2 IDE 개발환경의 Event Log에 아래와 같은 식으로 OutputDebugString 메세지가
출력되는 것을 확인할 수 있을 겁니다.



...

질문에 언급되어있는 내용으로 봐선 Runtime Package대신 static 라이브러리를 사용하는 것 같은데. 맞죠.
Dynamic RTL, Delphi RTL, Runtime Package 옵션 사용하지 말고 컴파일 하세요.

...

+ -

관련 글 리스트
66492 System.pas 컴파일이 왜 안되나요. RAD XE2 입니다 cubase 1324 2012/03/02
66493     Re:System.pas 컴파일은 불가능합니다 델파이.컨설턴트 1229 2012/03/02
66494         Re: System.pas 컴파일한거 참고하세요 빌더(TWx) 1762 2012/03/03
66497             Re:Re: 빌더님 잘되네요. 감사합니다 cubase 1464 2012/03/03
66498                 Re:Re:Re: 빌더님 잘되네요. 감사합니다 Lyn 1129 2012/03/03
66508                     Re: Lyn님이 델파이 컨설턴트 한다는 분인가요 cubase 1077 2012/03/05
66510                         Re:Re: Lyn님이 델파이 컨설턴트 한다는 분인가요 Lyn 1060 2012/03/05
66509                         Re:Re: Lyn님이 델파이 컨설턴트 한다는 분인가요 Intotheblue 1029 2012/03/05
66499                     Re:Re:Re:Re: 빌더님 잘되네요. 감사합니다 civilian 1142 2012/03/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.