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
[2714] Re:Re:[질문]MDI Application의 child window들을 DLL로 구성하려면..
김대영 [] 3771 읽음    2000-01-14 00:00
박지훈.임프 님이 쓰신 글 :
: 김대영 님이 쓰신 글 :
: : main.exe는 MDI의 parent를 가지고 있는 실행 가능한 프로그램이고
: : menu1.dll은 MDI child window를 가지고 있는 dll입니다.
: : 또한 이 dll에느 child window를 생성시키는 export function을 정의해두었습니다.
: : 생성 방법은 다음과 같이 했구요
: :
: : ----------------------------------------------------------------------------
: : // 선언부
: : extern "C" __declspec(dllexport) int CreateChildForm(TApplication*, HANDLE);
: :
: : ....
: :
: : // 몸체
: : int CreateChildForm(TApplication *ParentApp, HANDLE ParentHandle)
: : {
: :     Form1 = new TForm1(ParentApp, ParentHandle);
: : }
: : ----------------------------------------------------------------------------
: :
: : 이와 같이 한 뒤 main.exe에서 이 함수를 호출하면 MDI parent를 찾을 수 없다는
: : 에러가 발생합니다.
: : 근본적으로 잘못되었다면 지적해주시고
: : 올바른 방법을 알려주시면 고맙겠습니다.
: :
: : 감사합니다.
:
:
:
: 임펠리테리입니다.
: DLL 내에 있는 MDI 차일드폼은 Parent가 될 메인폼을 찾을 수가 없으므로 그런 에러가 발생합니다.
:
: 코딩을 하신 걸로 봐서는.. 글쎄요. 어디선가 소스를 보시긴 한 것 같은데, 일부만 보셨나봅니다.
: 차일드폼의 생성자에 인자를 두개 넘겨준 걸로 봐서는 디폴트로 만든 생성자를 변경했든지 혹은
: 오버로드해서 새 생성자를 추가하셨나보군요. 차일드폼의 생성자를 보여주시지 않으셔서 확신할
: 수는 없지만, 만약 생성자의 코드에서 베이스생성자에 Owner로서 넘겨받았던 ParentApp를 다시
: 념겨줘야 합니다.
:
: 잘 이해가 안되시거나 혹 다른 이유인 것 같으시면 자세한 소스를 첨부해서 다시 질문해주시기
: 바랍니다.
:
: 그럼 이만...



먼저 답변 고맙습니다.
임프님의 답변중에 다음 부분이 이해가 가지 않더군요.

>> "만약 생성자의 코드에서 베이스생성자에 Owner로서 넘겨받았던 ParentApp를 다시
>> 념겨줘야 합니다."


저는 차일드의 생성자로 디폴트 생성자를 변경해서 사용했습니다.
----------------------------------------------------------------------------
public:        // User declarations
    __fastcall TForm1(TComponent* Owner, HANDLE ParentHandle);
----------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner, HANDLE ParentHandle)
    : TForm(Owner)
{
}
----------------------------------------------------------------------------
위 코드가 child form으로 생성된 기본 코드에서 변경한 전부입니다.
어디서 소스를 본것은 아니고 일반 MDI 구조의 Application을 만든 후
child의  source만 DLL code에서 사용하도록 한 것입니다.
(본거라면 다 보고 제대로 했을텐데..)
추가한 ParentHandle은 나중에 사용하려고 넣어둔 것이구요.

추가 질문으로서 충분했는지 모르겠네요.
감사합니다.

+ -

관련 글 리스트
2701 [질문]MDI Application의 child window들을 DLL로 구성하려면.. 김대영 3768 2000/01/13
2709     Re:[질문]MDI Application의 child window들을 DLL로 구성하려면.. 박지훈.임프 3693 2000/01/14
2714         Re:Re:[질문]MDI Application의 child window들을 DLL로 구성하려면.. 김대영 3771 2000/01/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.