Q&A

  • DLL이 Destroy되는 시점을 알 수 없을까요?
DLL안에서 생성한 전역(?)객체를 실컷 사용하다가  
DLL을 로드한 어플리케이션이 죽을 때에 같이 객체를 Free해주려고 하는데
그 시점을 어떻게 캐취할 수 있을까요?
도무지 답이 안나오네요...흐으...
고수님~ 답변좀 부탁드립니다!!!
3  COMMENTS
  • Profile
    2002.05.04 03:08
    DLL에서는 4가지 메시지가 있습니다.
    로드될때, 해제될때, 스레드를 생설할때, 스레드를 종료할때.

    DLL의 DllProc라는 전역객체에 우리가 원하는 프로시져를 할당하여, 각각의 메시지에서 원하는 작업을 하면 됩니다.
    DLL이 로드될때 DllProc에 프로시져를 할당하smsep, Dll의 시작점은 프로젝트파일의 begin end 부분입니다.
    아주 잘하는 사람이 만들어 놓은 예제를 보면,

    //보통 DLLEntryPoint라는 이름을 쓴답니다. 그리고 반드시 인자는 DWord형 하나고요.

    library SomeDLL;
    ...

    procedure DLLEntryPoint(dwReason: DWord);
    begin
      case dwReason of
        DLL_PROCESS_ATTACH: ShowMessage('Dll 실행');
        DLL_PROCESS_DETACH: ShowMessage('Dll 제거'); //이게 DLL의 종료시점이 되겠네요.
        DLL_THREAD_ATTACH:  ShowMessage('Thread 실행');
        DLL_THREAD_DETACH:  ShowMessage('Thread 제거');
      end;
    end;

    begin
      //원하는 프로시져를 할당하고요.
      DllProc := @DLLEntryPoint;
      //생성시에는 메시지를 날려줍니다.
      DLLEntryPoint(DLL_PROCESS_ATTACH);
    end.

    즐코하세요...^^

  • Profile
    최용일 2002.05.03 23:40
    안녕하세요. 최용일입니다.

    어플리케이션이 죽을때 같이 죽으라고 종료메세지를 날린다거나, 전역객체를 만들때 어플리케이션에게 그 객체를 넘겨줘서 다 사용한 후에는 어플이 걍 Free하면 될거 같은데요...

    ^^ 항상 즐코하세요...

  • Profile
    신현빈 2002.05.04 00:55
    안녕하세요 최용일님!
    답변 정말 감사드립니다 ^^;;
    꾸벅~