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
[56173] Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다.
장성호 [nasilso] 3784 읽음    2009-02-17 11:12
질문에 대해
말씀하신 내용만으로는 문제를 파악하기 힘드네요

ShowModal은 자신이 Show되어있는 동안
현재 쓰레드의 다른 모든 Window들을  Disable시키기
당연히 그럴수 밖에 없는것이구요(ShowModal의 원래 목적이죠)

Show로 하는게 맞는데....
문제는 왜 Show로 했을때 이상한 현상이 생기는가 이겠죠?

Dll에서 생성한 Form을 Show했더니
"창이 깜박거린다", "다운된다" 라고 하셨는데...
좀더 구체적인 현상을 알고 싶네요..

간단한 샘플 코드를 올려봐 주심이 좋을것도 같구..

Dll에 Form을 포함하는 경우
Dll에 Form을 포함하는 경우 주의할점에 대해 조금 말씀 드리겠습니다.

C++Builder나 Delphi로 윈도우 Application을 만들면
가장 기본 Library인 VCL을 사용해서 만듭니다.

이놈은 IDE버젼별로 거의 다르구요..
C++Builder6은  vcl60.bpl    ,  Delphi 7      은  vcl70.bpl
C++2007      은  vcl100.bpl  ,  C++2009      는  vcl120.bpl  
http://www.delmadang.com/community/bbs_view.asp?bbsNo=3&bbsCat=0&st=S&keyword=%uBC84%uC83C&indx=409013&keyword1=버젼&keyword2=&page=1

이 bpl 은 일종의 Dll 입니다.

그런데 C++Builder 설치 폴더에 가보면 bpl 만 있는게 아니라
Import Library인   xxx.bpi  도 있지만
Static Library인    xxx.lib    도 있습니다. 


이 Library는 프로젝트 옵션(링크 옵션)에 따라

exe에  Import Library(xxx.bpi)가  링크 되어서
Loader가 exe(또는 Dll)를 Load할때  과련 Dll인   xxx.bpl 을 load하여 동적으로 link 하기도 하지만

Static Library인 xxx.lib가  link 되면  exe(Dll을 Load할 시점)가 실행할 시점엔  Dll인 xxx.bpl 이 필요 없게 되죠

이 프로젝트 옵션은
Packages 탭의 맨 아랫쪽에 있는 Build with runtime packages 입니다.






이놈을 unchecked하면
Edit박스에 있는 library들이 만들고 있는 exe나 Dll에 Static-Library 가 Link 되구요
Build with runtime packages를 Check하면 Edit박스 안에 Library들이
실행시점에 LoadLibrary하여 Link됩니다.

문제는 Dll과 Exe의 경우 둘중 하나라도
Build with runtime packages옵션을 uncheck 하면
둘다 Static-Library 가 링크 되던가?
아니면 한쪽은 Static-Library , 다른쪽은 Dynamic-Library 가 하게되죠

폼을 포함하는 경우 vcl 이  Dll과 exe 두군데 각각 따로 포함되게 되는 경우가 발생합니다.
이러게 되면 Application객체나 Screen객체가  Dll과 exe가 다른놈이 됩니다.
그뿐만 아니라 Library(VCL)에 있는 전역변수 들이 모두 두개씩 각각 있어서
Dll과 exe에서 다른 변수를 참조하게 되죠

Form이 포함된 Dll을 만드실경우  Build with runtime packages를 check하시고
항목에 반드시 vcl 을 넣으시구 Dll과 exe를 컴파일하셔야 합니다.
그리고 배포할때는 VCLxx.bpl을 함께 배포하시구요

참조
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=808
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=50394

그럼..


라이손레종ㅎ 님이 쓰신 글 :
: 이전에 질문 올려놓고 기다리다 답변이 없어.. 묻혀 질까 다시 질문을 드립니다...
: 제가 거의 학생 보다 못한 수준입니다.. 쉽게 설명을 드린다면 감사 하겠습니다..
:
: 질문요지는..
: DLL에 폼을 NEW->폼 이렇게 해서 넣었고.. 이폼은 다른 프로그램에서 동적로드하여 DLL폼을 보여주되 다른 폼을
: 선택도 가능 햇으면 합니다.
:
: Q&A를 찾아 보니
: Form2=new TForm2(NULL);
: Form2->ShowModal();
: delete Form2;
:
: 따라하니.. ShowModal로 뛰어 지면 그폼이 종료하기 전까진 다른 폼은 선택한다던지 이런걸 할수가 없더군요..
:
: 다른 Q&A는
: Form2=new TForm2(NULL);
: Form2->Show();
:
: 하고 Action = caFree 하면 된다 하는데..  DLL 파일 만드는데는 오류는 없었지만..
: 동적로드 하여 함수를 호출하면 창이계속 깜빡거리는 현상으로 다운이 되버립니다.
: 이렇게 저렇게 다해도 마찬가지던데요..  답변 꼭 부탁드립니다..

+ -

관련 글 리스트
56170 [질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 라이손레종ㅎ 1815 2009/02/17
56173     Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 장성호 3784 2009/02/17
56179         Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 라이손레종ㅎ 1548 2009/02/17
56181             Re:Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 전재득 1473 2009/02/17
56182                 Re:Re:Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 라이손레종ㅎ 1365 2009/02/17
56183                     Re:Re:Re:Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 전재득 1393 2009/02/17
56184                         Re:Re:Re:Re:Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 라이손레종ㅎ 1518 2009/02/17
56186                             Re:Re:Re:Re:Re:Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 전재득 1516 2009/02/17
56185                             Re:Re:Re:Re:Re:Re:Re:[질문]동적 DLL(폼이 있는)을 불러 폼을 띄우고자 ..합니다. 장성호 1692 2009/02/17
56187                                 Re:Re:Re:Re:Re:Re:Re:Re:휴아~ 답변 감사합니다~ 라이손레종ㅎ 1517 2009/02/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.