|
안녕하세요
답변 감사 합니다. ^^
MDI Child 가 원래 모델에서도 동적생성이라 MDI Form 사라질때 딜리트 시켜줍니다.
이것저것 테스트 한 결과 툴바2K이 가장 유력한 용의자 입니다.
툴바2K 컴포넌트중 MDI 윈도우 관리해주는 녀석이 있는데 그 컴포넌트가 MDI 관리때문에
메세지 후킹을 하는데 HINSTANCE 를 사용하는게 있나 봅니다.
에고.. 암튼 지금도 삽질 진행중입니다 ^^;;
그리고 소스는 별거 없습니다.
DLL 측에서는 MDIChildFactory 같은 함수를 익스포트 시켜놓고 EXE 측에서 그 펑션에
MDIForm 과 Application 포인터를 인자로 담아 호출하게 하는 구조입니다.
좋은 하루 되세요..
정진후 님이 쓰신 글 :
: 서정국.새더 님이 쓰신 글 :
: : 안녕하세용..
: : 프로젝트 진행하던중 덩치가 너무 커져 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();
: }
:
: 제가 잘못 짚고 장님 코끼리 다리 만지는 소리 했는지 모르겠군요.
: 혹시 그래도 해결이 안되면 소스를 올려보시지요
:
: 그럼 이만
:
|