Q&A

  • DLL Load 에 관하여...
A프로그램에서 b.dll을 다이나믹하게 링크를 합니다.

B프로그램에서도 b.dll을 다이나믹하게 링크를 합니다.



이때,



1. A프로그램을 실행시키면 b.dll 이 메모리에 Load 됩니다.



2. 그리고 하드디스크에서 b.dll 을 삭제합니다.



3. B프로그램을 실행시킵니다.



그러면 이때 B프로그램은 메모리에 이미 상주되어있는 b.dll과 링크되어야 합니다.



그런데 실제로는 "b.dll 을 찾을 수 없다"는 오류 메세지만 뜹니다.



제가 알기로 링크하고자 하는 dll 이 메모리에 이미 존재한다면

다시 Load 하지 않는걸로 알고있는데요...



위의 오류 메세지는 디스크에서 다시 dll 을 찾아서 Load 할려다가 나오는 오류같습니다.

메모리에서 찾았다면 못찾을 리가 없다고 생각이 됩니다.



핵심) dll 이 메모리에 로드된 후에 디스크에서 파일을 삭제하여도

b프로그램이 메모리에서 b.dll 을 찾아 링크하여야 합니다.



위와 관련하여 답변 부탁드립니다.





1  COMMENTS
  • Profile
    양병규 2000.05.27 23:58
    그렇게 되지는 않습니다.

    DLL을 로딩하는 함수들이 모두 파일에서 읽어오도록 만들어졌기때문에 안됩니다.



    이런경우 방법이 있다면..

    메모리맵이라고 아시는지 모르겠는데 메모리맵을 이용하시면 될것같습니다.



    메모리맵은 메모리상의 일부분에 데이터를 저장하고 읽어오게 해주고 그 영역에 고유의 이름을 붙여줍니다. 그래서 그 이름을 가진 메모리맵이 있나없나 확인하고 있으면 읽어오고 없으면 생성해주고 머~ 그런 일들을 할 수 있습니다.



    DLL파일을 메모리맵에 올려놓고 실행파일이 실행될때 DLL이 메모리맵에 있으면 읽어서 파일로 저장한다음 그 DLL을 로딩하고 바로 지우면 말씀하신 내용처럼 될것 같습니다.



    메모리맵에 관련된 자료는 이곳은 잘 모르겠고 델코강좌나 하이텔비파툴 델파이강좌 게시판에 민성기님이 올리신 글이 있습니다.



    그럼

    평안하시길~









    이도선 wrote:

    > A프로그램에서 b.dll을 다이나믹하게 링크를 합니다.

    > B프로그램에서도 b.dll을 다이나믹하게 링크를 합니다.

    >

    > 이때,

    >

    > 1. A프로그램을 실행시키면 b.dll 이 메모리에 Load 됩니다.

    >

    > 2. 그리고 하드디스크에서 b.dll 을 삭제합니다.

    >

    > 3. B프로그램을 실행시킵니다.

    >

    > 그러면 이때 B프로그램은 메모리에 이미 상주되어있는 b.dll과 링크되어야 합니다.

    >

    > 그런데 실제로는 "b.dll 을 찾을 수 없다"는 오류 메세지만 뜹니다.

    >

    > 제가 알기로 링크하고자 하는 dll 이 메모리에 이미 존재한다면

    > 다시 Load 하지 않는걸로 알고있는데요...

    >

    > 위의 오류 메세지는 디스크에서 다시 dll 을 찾아서 Load 할려다가 나오는 오류같습니다.

    > 메모리에서 찾았다면 못찾을 리가 없다고 생각이 됩니다.

    >

    > 핵심) dll 이 메모리에 로드된 후에 디스크에서 파일을 삭제하여도

    > b프로그램이 메모리에서 b.dll 을 찾아 링크하여야 합니다.

    >

    > 위와 관련하여 답변 부탁드립니다.

    >

    >