장성호님이 열혈 추적중이시네요. ^^
알아내신 게 모두 맞습니다.
Runtime packages 설정에 따라 달라지는 이유는 간단합니다.
아시다시피 TApplicatipn 클래스와 Application 객체는 forms 유닛에 포함되어 있습니다. 그리고 이 forms 유닛은 vclXX.bpl 패키지에 포함되어 있구요. (XX는 당근 컴파일러 버전이죠)
Runtime packages를 체크해서 컴파일하면, 해당 실행파일이 실행될 때 vclXX.bpl 패키지가 로드되고, 이 vclXX.bpl 패키지가 로드되는 dll 공유 메모리 주소 공간에 Appllication 객체가 만들어지게 됩니다. 따라서 해당 프로세스의 주소 공간에서 이렇게 Runtime packages를 사용하도록 설정된 모든 dll들이 단일 Application 객체를 공유하게 됩니다.
반면에, Runtime package를 사용하지 않으면 dll 자체에 forms 유닛이 컴파일되어 정적으로 링크되지요. 당연히 dll 하나마다 각각의 Application 객체가 만들어지게 됩니다.
그럼...
: [추신]
:
: 고수님들께 추가질문 드립니다.
:
: Runtime packages 의 check / uncheck에 따라서 Application 객체가 하나일수도 있구
: 둘이 될수도 있던데...
: 왜그런지 정확한 comfile원리와
: exe가 run될때 , dll이 load될때 어떻게 동작하는지 설명좀 해주실수 있겠습니까?
:
: 미리 감사말씀 드립니다.
:
: 그럼
:
:
|