|
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 을 인젝션 시킬 때, 모달리스 창이 뜨도록 하고 싶습니다.. )
:
: 제가 뭔가 잘못 생각하고 있는건가요..?;;
|