Q&A

  • Dll관련 FreeLibrary 질문입니다.
MDI 메인에서 아래와 같이 dll폼을 Child 불러왔는데...



gChild_H := LoadLibrary('TEST.DLL');

ShowMessage(IntToStr(gChild_H));

@TEST_Mgr := GetProcAddress(gChild_H,'TESTMgrChild');

Return_Hnd := TEST_Mgr(Application, Self,ADOConnection1, gUser_ID, Self.Handle,gSer_Addr);



호출된 폼을 종료시키면서 FreeLibrary를 이용해서 메모리에서 지우려고 합니다. 근데... 자꾸 FreeLibrary 실패를 하네요. 하는방법이 잘못된건지 아님 FreeLibrary 호출 시점이 잘못된건지...



저 같은 경우는...호출된 Child 폼에서 Cafree = True; 하기 직전에 메인으로 메세지를 보내서 FreeLibrary()을 하는데 Free가 안되더라구요. 그리고 핸들값은 어느걸 써야 되는지도 잘 모르겠구요. gChild_H or Return_Hnd ??? => 폼을 Child로 부르니까 핸들값이 첨에 Load한 핸들값과 틀려지더라구요. FreeLibrary(gChild_H ) => 이렇게 하면 에러메세지와 함께 메인까지 죽어버리고. FreeLibrary(Return_Hnd) 이렇게 하면 안되구...



어떻게 해야 하나요? 방법이 자못된건지...



고수님들 좀 알려주세요.



* gChild_H : Main에서 자식폼 생성 Dll을 호출하기 위해서 사용한 LoadLibrary()에서 리턴한 핸들값.



* Return_Hnd : 자식폼이 폼을 생성하면서 리턴한 핸들값(MDI Child Form).



* gChild_H <> Return_Hnd



0  COMMENTS