2014-03-27 8 views
2

내가 만든 BPL 파일에 대한 참조가 포함 된 VCL Forms 앱이 있습니다. BPL에서 프레임 컴포넌트의 유닛 이름을 VCL 앱의 메인 윈도우의 uses 절에 추가했습니다. 응용 프로그램이 잘 빌드되지만 실행하면 프로젝트 파일의 첫 번째 줄 "Application.Initialize"에 도달하기 전에 종료됩니다. uses 절에서 프레임 단위를 주석 처리하면 응용 프로그램이 시작되어 제대로 실행됩니다.응용 프로그램을 BPL로 변환 한 다음 Application이 Application.Initialize 전에 죽습니다.

앱이 시작될 때 치명적인 오류가 발생할 수있는 원인은 무엇입니까?

시동시 BPL 파일을로드하는 데 문제가 있다고 생각하지만 문제를 찾는 데 문제가 있습니다. 고맙습니다.

자세한 정보 아래 ... VCL 앱이 XE5에 있으며 BPL로 변환하려고합니다. 전체 앱은 하나의 TFrame 컨트롤에 있습니다.이 컨트롤에는 앱의 기본 기능에 대한 액세스 권한을 부여하는 많은 다른 버튼과 프레임이 있습니다. 이 "메인 프레임"은 몇 가지 메뉴 항목을 제외하고는 비어있는 앱의 메인 폼에 배치됩니다. 원래의 응용 프로그램은 올바르게 빌드되고 실행됩니다.

필자는 새로운 BPL 프로젝트를 만들었고이 기본 프레임 구성 요소를 추가하여 본질적으로 내 전체 응용 프로그램이었던 BPL 패키지를 만들었으며 이전의 일반 독립 실행 형 exe 응용 프로그램에 사용할 수있었습니다. 또는 RemObjects Hydra 플러그인 모듈에 추가되고 궁극적으로 C# 응용 프로그램에 포함될 수 있습니다. 단일 "메인 프레임"구성 요소가 포함 된 BPL 프로젝트는 오류없이 정상적으로 빌드됩니다.

그런 다음 빈 폼이 하나 인 새로운 VCL Forms 앱을 만들고 프로젝트의 "옵션 -> 패키지 -> 런타임 패키지"를 새 BPL을 포함하도록 설정하고 "링크 실행 - 시간 패키지 "옵션. 메인 폼의 uses 절에 "메인 프레임의"단위를 추가하면 모든 것이 오류없이 생성됩니다.

문제 : XE5에서 응용 프로그램을 실행할 때 정상적으로 시작될 것으로 보이지만 코드 "Application.Initialize;"의 첫 번째 행에 도달하기 전에 종료됩니다. 프로젝트 파일에서. 필자는 아직 BPL에 내장 된 "메인 프레임"의 인스턴스를 생성하는 코드를 작성하지 않았습니다. 나는 유닛을 uses 절에만 추가했습니다. 오류 메시지는 표시되지 않으며 XE5의 빌드 또는 출력 창에 아무 것도 게시되지 않습니다. uses 절에서 "메인 프레임의"단위를 주석 처리하면 응용 프로그램이 제대로 실행되고 빈 주 창이 표시됩니다.

참고 :이 앱은 JVcl, NativeXml, TsiLang, ZipForge, & FastReports를 사용합니다.

+0

예. bpl 같은 소리는 찾을 수 없습니다. 왜 그걸 발견해야한다고 생각하니? –

+0

BPL 파일은 시스템 경로 또는 응용 프로그램 폴더에서 액세스 할 수 있어야합니다. BPL 파일이이 두 위치 중 하나에 있는지 확인해야합니다. – Graymatter

+0

@Graymatter 기술적으로 DLL 검색 순서를 사용하여 검색합니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586.aspx –

답변

0

설명하는 증상은로드 시간 종속성의 실패한 해결 방법입니다. 당신이 BPL 파일을 로딩 타임에 위치시키지 않았기 때문에 당신이 묘사 한 바를 잘 이해할 수 있습니다. 로드 시간 패키지 종속성은 시스템 로더가 처리하므로 DLL 검색 순서가 적용됩니다. 일반적으로 종속 모듈이 실행 파일과 동일한 디렉토리에 있는지 확인해야합니다.

로드 시간 종속성 오류는 디버거에서 실행할 때 잘 처리되지 않습니다. 실행 파일을 직접 시작하면 더 나은 오류 메시지가 나타납니다. 문제를 식별하기에 충분하지 않은 경우 Profile Mode에서 Dependency Walker를 사용하여로드 시간 오류에 대한 자세한 진단 정보를 얻으십시오.

패키지 배포에 대한 Embarcadero의 조언에 대한 최종 의견 1 개. 공식 Embarcadero documentation은 시스템 디렉토리에 공유 패키지를 설치하는 것을 권장합니다. 이것은 Windows 3.1에서 20 년 전 일반적인 관행 이었지만 아무도 21 st 세기에이 작업을 수행해야합니다. Embarcadero의이 특별한 조언을 따르지 말고 시스템 디렉토리가 시스템에 속한다는 사실을 존중 해주십시오.