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
[49973] [질문] DLL에 있는 폼을 여러번 띄울수는 없는건가요?
시몬 [] 1099 읽음    2007-07-19 17:12
안녕하세요
폼을 포함한 DLL을 만들었을때 질문이 있습니다.


폼을 포함한 DLL을 만들때 dllMain이 있는 파일의 내용입니다.
#include <vcl.h>
#include <windows.h>
#include "frmMain.h"

#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
    return 1;
}

extern "C" void __stdcall ConstructorModule()
{
    if (FormMain!=NULL) {
        ShowMessage("이미 메인폼이 생성되었습니다");
        return;
    }
     FormMain = new TFormMain(NULL);
     FormMain->Show();
}

와 같이 작성하였습니다.
FormMain은 "frmMain.h"파일에 extern TFormMain *FormMain;
"frmMain.cpp"파일에 TFormMain *FormMain;로 선언되어 있구요

이 DLL을 dllInstance = LoadLibraryEx() 로 동적 로드하여 사용합니다.
물론 잘 동작합니다 (VC++에서도 말이죠)
그런데 dllInstance2 = LoadLibraryEx()로 다른 인스턴스로 다시 로드하여 ConstructorModule()를 호출하면
"이미 메인폼이 생성되었습니다"라고 나오더군요.

인스턴스를 하나를 쓴건 아닙니다. 그런데도 이렇게 나온다는 것은
dll안에 전역으로 선언된 변수는 동적으로 로드해도 하나만 존재한다는 말인가요?

그렇다면 폼을 포함한 DLL은 한번만 로드해서 사용할 수 밖에 없는건가요?
FormMain!=NULL 을 체크하지 않으면 그 전에 만든 폼의 포인터를 잃어버리기 때문에 문제가 생기지 않습니까?
그래서 체크를 한건데...
DLL에 있는 폼을 여러번 띄울수는 없는건가요?

만약 방법이 있다면 답변을 부탁드립니다. 아무리 뒤져봐도 방법이 없는것 같네요 ㅠㅠ

+ -

관련 글 리스트
49973 [질문] DLL에 있는 폼을 여러번 띄울수는 없는건가요? 시몬 1099 2007/07/19
49982     Re:[질문] DLL에 있는 폼을 여러번 띄울수는 없는건가요? 장성호 1526 2007/07/20
49992         정성호님 답변 감사드립니다. 해결되었습니다 ^^ 시몬 1159 2007/07/20
49979     Re:[질문] DLL에 있는 폼을 여러번 띄울수는 없는건가요? .. 1452 2007/07/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.