Q&A

  • DLL 로드 후 해제시 문제.
안녕하세요.

이번 프로젝트에서 동적으로 DLL을 로드해서 MDI child form을 띄우고 있습니다.
LoadLibrary를 사용해서 폼은 잘 뜨는데,
폼을 닫고 그 폼의 DLL을 컴파일 하면 사용중이라고 하면서 컴파일이 되지 않네요.
FreeLibrary를 하면 될꺼 같긴한데..

FreeLibrary를 메인폼에서 해야 할까요? 차일드 폼에서 해야할까요?
테스트 해본것은 다음과 같습니다.

1. LoadLibrary
    Try
      FreeLibrary
    Finally
    End; => 바로 에러.

2. 차일드 폼 Destroy 시 메인폼에 메시지를 보내서 FreeLibrary => 폼닫을 때 에러.

3. 차일드 폼 Destroy 시 메인폼에 LoadLibrary 한 Handle값을 넘기고 메인폼의 Timer에서 FreeLibrary
=> 에러안나고 컴파일도 됨. Timer를 사용해서 (막연한)찜찜함..

몇 일째 잡고 있는데 답이 잘 안나오네요.
혹시 같은 경험을 하신 분이나 아시는 분은 답글 부탁드릴께요. (__)
2  COMMENTS
  • Profile
    구창민 2007.11.14 02:02
    안녕하세요..

    아래 코드는 로드된 DLL 이 해제가 안되어 있는경우 해제를 하는 코드입니다.

    참고하시고 즐거운 프로그래밍 하세요..



    var
      hDLL : HWND;
    begin
      hDLL := GetModuleHandle('DLL이름');
      while True do
      begin
        if hDLL <> 0 then
           FreeLibrary(hDLL)
        else
          Break;
      end;

      ...

      LoadLibrary(...

    end;



  • Profile
    안기성 2008.08.06 18:31
    오랜 만에 들어왔더니.. 댓글이..
    KDDG_MIN 님 감사합니다.