C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[59027] Re:MDIChild 폼을 DLL에서 생성시 MDIChildren 에 등록되지 않는 이유 ?
장성호 [nasilso] 1206 읽음    2009-11-10 16:31
음...

혹 65번 팁
"builder 에서 MDI Child Form을 DLL로 만들어 쓰기..."를 보신 것인가요? 
   (67번은 다른 내용이던데..)

음...
위 팁에는 꼼수를 사용해서
DLL에서 MDI-Child를 만든것입니다.

제대로 하는 방법은 매우 간단합니다.
[DLL에서 MDI-Child만드는 방법]

방법1 - 제대로 된 방법
    1)  DLL 및 exe의 프로젝트 옵션에서   Runtime-Packages에   vcl를 넣고 체크하여서 컴파일하세요
    2) 그리고 dll에서는 그냥 exe에서 mdi-child 폼 만들듯이 그냥 new 하시면 됩니다.
        (파라메터로 Application객체를 넘길 필요가 없습니다.)

방법2 - 꼼수
     ; Runtime-Package를 사용하지 않고 하는 방법
    1)  위 65번 팁 방식과 똑같이 하되 , Application객체뿐만 아니라 Screen객체도 넘겨주세요
         그리고 Dll쪽에 Application객체와 Screen객체를 Exe에 걸로 교체합니다.
    2)  그런다음 Dll에서 Form을 생성하면 됩니다.

이유
    - 모든 TCustomForm은 생성되면서 Screen객체에 Form이 등록됩니다.
       Screen->Forms배열에 등록되면 Screen->FormCount 가 증가하죠

    -  MDIChildCount 나 MDIChilden 배열을 그냥 Screen객체에 등록된 Forms배열에서
        Form의 속성이 MDIChild인것만 return해주는 것입니다.

   - 그런데 VCL을 Runtime-Package로 사용하지 않으면
       EXE쪽의 Screen객체와 Dll쪽의 Screen객체가 다른놈이 됩니다.
       문론 Application객체도 마찬가지구요

    - 문제는 위 팁에서는 Application객체는 EXE에서 DLL쪽으로 넘겨줬는데..
       Screen객체는 넘겨주지 않았네요
       그래서 문제가 발생한 것입니다.


권장 방법
    위 방법중 그냥 1번 방법을 쓰세요
    2번 방법을 쓰면 나중에 Dll을 해제할때도 주의 해야하구
    위 문제이외에 매우 많은 다양한 문제가 발생합니다.

    1번 방법 그냥 runtime package를 사용하도록 체크만 하면 되는
    너무나도 심플하고 문제의 소지를 줄여주는 방법을 사용하는것을 적극 권장합니다.


Runtime Package사용의 불편한점
    Runtime Package사용에 딱 하나 불편한점이 있습니다.
    그것은 배포할때 exe뿐만 아니라   VCLxx.bpl도 같이 배포해야 하는 것입니다.
   
    저것 간편하게 하려구 엄청난 문제를 안고 있는 방법을 쓰는것보다
    그냥 runtime-package를 사용하시길 권장합니다.


    문론 dll 이나 BPL을  안쓰면 문제의 발생 가능성이 별루 없습니다.


그럼..

그 아이 님이 쓰신 글 :
: 계시물 팁&트릭의 67번의 글을 이용하여 DLL에서 MDIChild Form을 생성시켰는데
: 이것이 MDIChildren에 등록되지않아 MDIChildCount, ActiveMDIChild 를 사용할 수 없습니다.
: 어떻게 MDIChild를 등록시킬 수 있을 까요?

+ -

관련 글 리스트
59025 MDIChild 폼을 DLL에서 생성시 MDIChildren 에 등록되지 않는 이유 ? 그 아이 951 2009/11/10
59027     Re:MDIChild 폼을 DLL에서 생성시 MDIChildren 에 등록되지 않는 이유 ? 장성호 1206 2009/11/10
59031         답변 감사드립니다. Screen을 인자로 넘기지 않고 Child 등록하기. 그 아이 908 2009/11/10
59035             Re:답변 감사드립니다. Screen을 인자로 넘기지 않고 Child 등록하기. 장성호 1002 2009/11/10
59042                 다시 한번 감사드립니다. 그 아이 911 2009/11/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.