|
DLL 은 LoadLibrary 방식으로 로드합니다.
(참고로 다른 프로세스가 실행중일때 임의로 DLL 을 인젝션시키는거라서.. Static 으로는 할수가 없습니다)
FreeLibrary 가 호출되지는 않습니다..
창이 잠깐 깜빡하고 난 이후에도, 프로세스상에는 DLL 이 여전히 남아있으니까요~
TForm 생성자와 소멸자에 로그를 넣고 확인을 해봐도~
메인 프로세스를 종료하기 전까지는 소멸자가 호출되지 않습니다.
즉 Form 자체는 남아있다고 봐야되겠죠.
ShowModa() 을 얘기하셨는데.. 대화상자를 모달방식으로 띄워버리면~
DLL 에서 생성한 대화상자가 닫히기 전까지는 메인 프로세스에 제어권이 넘어가지 않는거 아닌가요?
제가 원하는건 DLL 에서 모달리스로 대화상자를 띄워서~ 원하는 작업을 하되..
메인 프로세스는 계속해서 동작을 해줘야 하거든요..^^:;;
전재득 님이 쓰신 글 :
: DLL을 동적으로 LoadLibrary 하시나요 아니면 Static 방식을 사용 하시나요?
:
: 동적으로 사용하신다면 당연 FreeLibrary 하는순간 메모리에서 DLL영역이 통째로 날아가 버립니다.
:
: 일단 DLL로 특정 함수를 호출 했다고 하고 DLL이 메모리에 내려가지 않았다는 가정에서는
:
: DLL함수를 호출해 줄때 파라메터로 부모의 컴퍼넌트 포인터를
:
: 넘겨주고 DLL쪽에서 그 포인터로 Form 을 생성후 ShowModal() 해주시면 됩니다 .
:
: ps. 딱히 안넘겨줘도 상관없이 작동 하긴하는데 정상 작동안할때도 있으니;;
:
: void __cdecl CreateForm( TComponent *pOwner )
: {
: Form2 = new TForm2( pOwner );
: Form2->ShowModal();
: }
:
: 잠깐 보였다 사라지는건 제가볼땐 동적으로 로드된 DLL이 FreeLibrary 되면서 메모리상에서 아에 제거 되서
:
: 생기는 현상 같아 보이네요~~
:
:
:
: HS.Soul 님이 쓰신 글 :
: : 안녕하세요...
: :
: : 빌더로 DLL 을 만들고 있는데~ 막히는 부분이 있어서 이렇게 질문을 드립니다.
: :
: : Form 을 가진 DLL 을 만들고 있는데~~ 이 DLL 에서 Form 을 생성하는게 원하는대로 되지가 않습니다.
: :
: : 제가 원하는건 DLL 이 로딩될 때, 모달리스 Form 을 생성하는건데...
: :
: : 자꾸 Form 이 생성되고 잠깐 화면에 보였다가~~ 사라져버립니다;;
: :
: :
: : EXE 파일에 대한 작업권한이 없기에 DLL 의 DllEntryPoint 함수에서..
: :
: : Form2 = new TForm2(NULL);
: : Form2->Show();
: :
: : 이런 식으로 구현을 했거든요..
: :
: : ( 이미 동작중인 다른 프로세스에 제가 만든 DLL 을 인젝션 시킬 때, 모달리스 창이 뜨도록 하고 싶습니다.. )
: :
: : 제가 뭔가 잘못 생각하고 있는건가요..?;;
|