2012-03-29 4 views
2

VariantsSysUtils의 코드를 수정하려면 (신속하고 더러운 테스트를하기 위해) 필요합니다.VCL 코드를 변경하는 방법은 무엇입니까?

변경 사항을 "컴파일"하려면 어떻게해야합니까?

물론 IDE에서 해당 유닛을 열어도되지만 변경할 경우 프로젝트가 다시 작성되어 다시 컴파일 된 유닛이 표시되지 않습니다.

수행해야 할 작업은 무엇입니까?

+0

새 데이터 유형을 만들고 새 데이터를 사용하여 테스트하십시오 – RBA

+3

제 질문은 : 왜이 ​​파일을 수정해야한다고 생각합니까? 종종 다른 방법으로 그것을 달성 할 수 있기 때문에. –

+0

어떤 종류의 변경 사항이 있습니까? –

답변

6

문제는 '새로운'단위에 대해 모든 RTL/VCL을 컴파일해야한다는 것입니다.

대신 해당 단위의 사본을 수정하고 사용하려는 경우 프로젝트에 추가하십시오. 델파이는 RTL/VCL에있는 것들을 사용해야합니다.

+6

유닛의 구현 섹션에서 변경을 수행하고 Emba가 원래 유닛을 컴파일 할 때 사용 된 것과 동일한 컴파일러 옵션을 사용하여 이러한 유닛을 컴파일하는 한 이렇게하면됩니다. –

+1

나는 Sysutils라는 새로운 유닛을 만들어 내 프로젝트에 추가하여 System.Sysutils 코드를 완전히 복사하고 그것을 수정했다 (구현시에만). 어쨌든 dpr에서 CTRL_Clcik sysutils.pas를 열면 내 새 장치가 아닌 System.Sysutils가 열립니다. – LaBracca

+1

@user 프로젝트에 추가하면 컴파일됩니다. IDE가 혼란 스러울 수도 있지만 디버거에서 단계별 실행을 시도하면 코드에 착륙해야합니다. –

2

Delphi 런타임 DCU가 사전 컴파일됩니다. 모든 빌드에서 컴파일하는 것은 시간 낭비 일 것입니다. 수정하고자하는 코드의 방법 인 경우

내장 클래스 다음 클래스 헬퍼 도움이 될 수 :

http://docwiki.embarcadero.com/RADStudio/en/Class_and_Record_Helpers

그래서 질문은 당신이 원하는 않는 코드의 일부입니다 런타임에서 수정 하시겠습니까?

3

당신이 장치의 interface 부분을 변경하지 않는 한 (즉, 당신은 단지 implementation 측면을 수정), 당신은 RTL 단위 (유일한 예외는 System.pasSysInit.pas,하지만이 아닌 자신 만의 버전을 만들 수 있습니다 범위 - 해당 장치의 향상된 기능에 대해서는 our blog site 참조).

Variants.pasSysUtils.pas의 사용자 버전을 프로젝트의 검색 경로에 입력하면됩니다. 그것들은 기본 RTL 대신에 고려 될 것입니다.

하지만 쉽게 깨질 수 있습니다.

테스트 목적으로는 괜찮습니다. 그러나 이러한 수정을 사용하려면 자동화 된 회귀 테스트를 사용하고 자신이하는 일을 분명히 알아야합니다.

(프로젝트 옵션의) RTL 단위의 "디버그"버전을 사용하고 공식 소스 코드 내에서 디버거를 사용하여 단계를 수행 할 수 있습니다. 소스를 건드리지 않고 문제를 찾는 데 도움이 될 수 있습니다.

유닛의 interface 부분을 변경하면 수정 된 유닛을 호출하는 모든 유닛을 다시 컴파일해야합니다. SysUtils 및 Variants의 경우 거의 모든 RTL입니다.

+0

아마 수정 된 vcl 단위에 링크 된 코드를 재배포하는 것이 라이센스에 위배됩니까? –

+1

예, Borland/Embarcadero 라이센스에 위배됩니다. 이것이 우리의 향상된 버전을 패치 형태로 제공하는 이유입니다. http://blog.synopse.info/post/2010/01/05/New-Enhanced-System-Run-Time-Distribution을 참조하십시오. –

0

정말 RTL을 다시 컴파일하려면 먼저 백업을 만드십시오. Delphi 2010 이전 버전의 Delphi는 rtl/vcl을 다시 빌드하기 위해 명령 줄에서 실행할 수있는 소스 폴더에 makefile을 가지고있었습니다. 나는 확실히 모른다. (아직도 D2009를 사용하고있다.)하지만이 파일이 새로운 버전에서는 더 이상 존재하지 않는다고 들었다. 바라건대 대안이 있습니다. 그렇지 않으면 각 유닛의 컴파일러 설정을 추측하려고 많은 시간을 낭비하게됩니다.


만 당신이 프로젝트의 폴더로 수정하고 변경하려는 장치를 복사 할 수 있습니다 프로젝트의 RTL 에서 "패치"버그를하고자하는 경우.RTL/VCL 전반에 걸쳐 수정 단위가 사용되는 경우 컴파일하기 위해 프로젝트 폴더에 대다수 종속 단위를 복사하는 경우가 있습니다.

프로젝트의 컴파일 시간이 현저히 느려지면 항상 초기 컴파일을 수행 한 다음 "패치 된"단위를 제거하고 컴파일 된 dcus를 남겨 둡니다.

관련 문제