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 을 찾아 링크하여야 합니다.
위와 관련하여 답변 부탁드립니다.
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 을 찾아 링크하여야 합니다.
>
> 위와 관련하여 답변 부탁드립니다.
>
>