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
[26861] Re:[질문] DLL 내부에서 MDI Child 를 생성할수 있는 방법 아시는분
정진후 [] 881 읽음    2003-08-21 20:36
서정국.새더 님이 쓰신 글 :
: 안녕하세용..
: 프로젝트 진행하던중 덩치가 너무 커져 DLL 로 따로 분리 하려 합니다.
:
: MDI 기반이고 각 폼들을 DLL 로 따로 띄어노려 하는데 에러가 나네요 ㅡㅡ;;
: 어설픈 지식으로 여기저기 찾아봤는 Application 이 MDI Window 핸들을 관리하고
: 또 이놈의 MDI Child 의 생성여부와 부모를 연결시켜주는 이런 작업을 하나 봅니다.
:
: 일단 메인 모듈의 Application 을 DLL 로 넘겨 그놈의 Application 으로 대체하니
: 실행은 되는데 억세스 바이올레인부터 다양한 에러를 접하게 됩니다. -___-;;
:
: 혹시 해결책 아시는분 답변 부탁드립니다. ㅠ__________ㅜ
:

실행은 되셨다고 하니 일단 처리는 제대로 하신 것 같은데...
제가 경험했던 바로는 위와 같이 MDI자식 윈도우를 DLL에 구현할 경우
메인 폼이 종료 시에 적절한 메시지를 "열려있는" 자식들에게 보내주지 못해서
에러가 나는 것을 보았습니다.

그래서 헬프를 뒤져 보니 TCustomForm에 열려있는 윈도의 개수를 알려주는
MDIChildCount라는 멤버와 열려있는 자식 윈도들의 포인터를 배열로
반환해 주는 MDIChildren이라는 멤버가 있어서 이 둘을 이용하여
필요시에 적절한 메시지를 해당 DLL의 자식 윈도에 보내어
자원해제등을 문제없이 처리하고 바이올레이션을 없앨 수 없었습니다.

간단한 예를 들면

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
    for(int i = MDIChildCount-1; i >= 0; i--)
        MDIChildren[i]->Close();
}

제가 잘못 짚고 장님 코끼리 다리 만지는 소리 했는지 모르겠군요.
혹시 그래도 해결이 안되면 소스를 올려보시지요

그럼 이만

+ -

관련 글 리스트
26820 [질문] DLL 내부에서 MDI Child 를 생성할수 있는 방법 아시는분 서정국.새더 617 2003/08/20
26861     Re:[질문] DLL 내부에서 MDI Child 를 생성할수 있는 방법 아시는분 정진후 881 2003/08/21
26862         Re:Re:[질문] DLL 내부에서 MDI Child 를 생성할수 있는 방법 아시는분 서정국.새더 848 2003/08/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.