2016-08-30 9 views
3

저는 BPL 프로젝트 (기본 자료 포함)와 검색 경로에 다른 프로젝트의 출력 (BPL 및 DCP) 위치가있는 EXE 프로젝트가 있습니다. EXE 프로젝트가 "런타임 패키지로 빌드"로 빌드되면 잘 빌드됩니다. 그러나 EXE와 BPL을 배포해야합니다. 여태까지는 그런대로 잘됐다.BPL/DCP에만 기반한 "런타임 패키지로 빌드"옵션을 선택하지 않고 BPL/DCP에 대해 EXE 프로젝트를 구축 할 수 있습니까?

차라리 EXE를 배포하는 것보다 (더 크게 할지라도) "런타임 패키지로 빌드"의 선택을 취소하면됩니다.하지만 그럴 수는 없습니다. 그것은 구축되지 않을 것이며, 누락 된 수업에 대해 불평을 시작합니다. EXE 프로젝트를 컴파일 할 수있는 유일한 방법은 실제 BPL 프로젝트의 DCU 경로를 EXE 프로젝트의 검색 경로에 추가하는 경우입니다. 그렇게 할 수는 있지만 DCU를 가리 키도록 강요하는 이유는 무엇입니까? 델파이가 BPL에서 가져갈 수 없습니까? 그것은 단지 맛의 문제가 아닙니다.이 방법으로 가서 DCU에 연결하면 양식에 속한 DCU의 경우 DFM 양식을 묻습니다. EXE에 내 원본 폴더도 포함시켜야합니다. 프로젝트의 Search Path를 사용하면 현재 컴파일 중으로 보일 것입니다. 이는 금지되어 있습니다. 내 EXE 프로젝트를 컴파일 할 때마다 BPL 프로젝트 코드베이스를 다시 컴파일 할 수 없습니다.

내가 분명히했으면 좋겠다.

제목에서 질문하는 것을 달성하는 방법에 대한 도움을 주시면 감사하겠습니다.

감사합니다.

+0

런타임 패키지로 빌드를 선택 해제하고 모든 소스를 컴파일러가 볼 수있게하십시오. 당신은 이미 이것을하는 방법을 알고 있습니다.어려움은 어디에 있습니까? –

+0

@DavidHeffernan EXPL 프로젝트가 빌드 될 때마다 BPL 프로젝트 (소스)가 빌드되기를 원하지 않았습니다. 실행되지 않은 런타임 패키지로 불타고있을 때. 나는 또한 그것들을 분리 된 것으로 생각하고 그것들을 격리시키고 BPL을 외부 의존성으로 다루기를 원했다. 나는 DCU의 위치를 ​​알려줄 수 있었지만, 그것은 의미가 있지만 근원은 무엇입니까? 흠. 이제는 모두 엉망이되어 같은 일의 일부가되는 것 같습니다. 이 방법을 사용하면 EXE를 빌드 할 때마다 BPL 프로젝트의 양식이 어떻게 구성되는지 볼 수 있습니다. – Eduardo

+0

모든 것을 구축하는 데있어 문제가 있습니까? 그렇다면 당신은 최신이라고 알고 있습니다. 파일이 변경되지 않은 경우 다시 작성되지 않습니다. 그것은 내가 일하는 방식입니다. 800mloc 및 컴파일은 일반적으로 2 ~ 2 분 정도 소요됩니다. –

답변

1

아니요, 불가능합니다. 런타임 패키지를 사용하려면 런타임 패키지로 빌드하려면 컴파일러 옵션을 켜야합니다.

질문의 두 번째 부분은 다음과 같습니다. 런타임 패키지를 사용하여 빌드하면 * .dcp 파일을 사용하여 컴파일됩니다 (.dfm 스트림은 패키지의 리소스에 연결되므로 * .dfm 파일은 직접 필요하지 않음). 런타임 패키지가없는 빌드에는 * .dcu 및 * .dfm 파일 (및 기타 필요한 파일)이 필요합니다.

두 경우 모두 컴파일/빌드하려면 라이브러리/검색 경로에 필요한 파일이 있어야합니다.

+0

* .dfm 파일에 대한 경로가 필요한 이유에 대해 명시 적으로 언급했기 때문에 Ari0nhh의 답변보다이 대답을 선택했습니다.하지만 실제로 둘 다이 파일을 못 박았습니다. 둘 다에게 감사드립니다. – Eduardo

4

외부 라이브러리를 연결하는 방법에는 두 가지가 있습니다. 정적동적입니다.

런타임 패키지를 사용하는 경우 동적 링크입니다. 실제 구현은 BPL 파일 (실제로는 간단한 dll)에 있으며, 프로세스 시작시 메소드와 클래스를 가져옵니다. 이로 인해 exe 크기가 줄어들지 만, BPL 파일을 출하해야합니다 (일반적인 dll과 동일). DCU 파일이 필요하지 않습니다. 왜냐하면 모든 것이 이미 컴파일되고 링크 되었기 때문에 링커는 가져 오기 섹션을 만들면됩니다.

런타임 패키지를 사용할 수 없으면 링커가 모든 클래스 및 메서드에 대해 개체 파일을 가져 와서 하나의 실행 파일로 결합해야합니다. 해당 데이터가 이미 실행 가능으로 연결되어 있기 때문에 BPL에서이 데이터를 추출 할 수 없습니다. 그것은 링크를 해제해야합니다 먼저, 기본적으로 불가능한 다른 모듈 구현을 분리. 따라서 프로그램을 링크하기 위해 컴파일 된 오브젝트 코드가 들어있는 DCU 개의 파일을 제공해야합니다.

질문에 대한 답변은 간단합니다. 불가능하지 않습니다.