|
Dll 자체에서 메모리를 할당해서 관리?하지 마시고,
Dll를 사용하는 곳에서 메모리를 할당하면 되는게 아닐지요?
시몬 님이 쓰신 글 :
: 안녕하세요
: 폼을 포함한 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에 있는 폼을 여러번 띄울수는 없는건가요?
:
: 만약 방법이 있다면 답변을 부탁드립니다. 아무리 뒤져봐도 방법이 없는것 같네요 ㅠㅠ
|