|
답변해주신 대로 확인해 보니까 소스파일에 IOTAModuleCreator 같은 인터페이스들이 보입니다.
대단하시네요 빌더님. 컴포넌트 공부를 해보려고 보고있던 소스였는데 제가 익스텐션 모듈을 보고있던
거였군요. 저 한테는 소스 수준이 너무 높은거 같습니다. 아직 공부가 많이 부족하네요.
빌더님!! 답변 감사드립니다.
빌더 님이 쓰신 글 :
: 나이스 님이 쓰신 글 :
: : 디자인타임 패키지 소스를 분석하고 있는데 아무리 찾아봐도 Register 함수가 보이지 않습니다.
: : 제가 알고 있기로는 컴포넌트를 등록하기 위해선 Register 함수가 반드시 필요한 것으로 알고있습니다.
: : 그런데 아무리 찾아봐도 디자인타임 패키지 소스코드에서 Register 함수가 전혀 보이지 않습니다.
: :
: : 런타임 패키지라면 Register 함수가 필요없지만 디자인타임 패키지에서 Register 함수가 없는게
: : 가능한 건가요. 전혀 이해를 하지 못하고 있습니다. 고수님들의 한수 부탁 드립니다.
:
:
:
:
: 답변:
:
:
: 나이스님이 보고있는 소스코드에...
:
: IOTAModuleCreator, IOTAGalleryCategory, IOTAEditorServices, IBorlaIOTAProject 등의 COM Interface 가
: 있는지 확인해 보세요.
:
: 위와 비슷한 Interface 정의가 보인다면.. 나이스님이 보고있는 디자인타임 패키지는 아마도 IDE 확장과 관련된
: 패키지 소스일 겁니다.
:
: 익스텐션 모듈은 IDE의 어드레스 공간에서 같은 컨텍스트로 돌아가기 때문에 Dynamic Load가 가능한 패키지
: 형식이라야 합니다. 런타임 패키지도 Dynamic Load가 가능한 형식이지만, 익스텐션 모듈은 사용자 애플리케이션
: 에 의해서 사용되는 모듈이 아니고, IDE에 의해서 사용되기 때문에.. 익스텐션 모듈을 구현할 때 디자인타임 패키지
: 형식으로 구현하게 됩니다.
:
:
: 익스텐션 모듈에서 사용자가 Register 함수를 정의해서, 예를들면... Register 바디에 RegisterPackageWizard
: 를 호출하는 식으로 명시적으로 패키지를 등록하는 것도 가능하지만... DsgnIntf, ToolsApi 등의 IDE 확장과
: 관련된 유닛을 포함하게 되면, 컴파일러가 패키지 바이너리의 Export 섹션에 PackageLoad, PackageUnload
: 엔트리를 생성합니다. 그리고 컴파일러가 코드를 생성할 때... PackageInfoTable이란 자료구조도 바이너리에
: 생성해 주게되는데... IDE의 패키지 로더에 의해서 익스텐션 모듈의 PackageLoad가 호출 될 때.. 익스텐션 모듈은
: 컴파일러가 생성해준 PackageInfoTable을 인자로 해서 넘겨주게 됩니다.
:
:
: 이런 식으로 패키지 로더는 컴파일러가 생성한 익스텐션 모듈의 PackageInfoTable의 위치를 알수 있게되고...
: PackageInfoTable에는 익스텐션 모듈 소스코드에서 정의되어있는 모든 class, method에 대한 정보는 물론..
: virtual method table 등에 관한 정보도 포함되어 있기 때문에(확장된 RTTI죠) 익스텐션 모듈에서 정의되어 있는
: Interface를 다이나믹하게 생성해서... 모듈에서 구현하고 있는 Interface를 IDE에 제공할 수도 있고... IDE가 제공
: 하는 Interface 서비스를 모듈에서 사용할 수도 있게 됩니다.
:
: IDE와 익스텐션 모듈간에 Provider/Consumer, 또는 그 반대로 Consumer/Provider 관계가 되기도 하는 거죠.
:
: 그리고...
:
: IDE 익스텐션 모듈을 반드시 디자인타임 패키지 형태로 구현해야만 하는 것은 아닙니다. 일반 DLL 형식으로 구현
: 할 수도 있는데요. 오히려 이 형태로 구현하는 게... 사용자가 IDE에서 마음대로 패키지를 Install/Uninstall 하는
: 것을 못하게 할수 있기 때문에 더 나은 선택이 될수도 있습니다. 패키지가 아닌 DLL형식으로 구현할 경우, IDE가
: 사용하는 레지스트리에 DLL 패스를 등록해주면 IDE가 시작할 때 자동으로 모듈이 올라오게 됩니다.
|