|
황진이 님이 쓰신 글 :
:
: 날씨가 춥군요
: 안녕하시죠 님들 ~~
:
: 감기 조심 하시구요 , 저 질문 있거든요
:
: 메인에서 dll을 불러요 -> dll에서 작업을 마치면 dll은 사라지는게 기본 구돈데요
:
: 문제는 그 dll을 버전 업해서 실시간으로 버전 업된 dll을 불러 쓰고 싶다는 말인데요
:
:
: 방법이 않보이네요
:
: CrateProcess()을 쓰기 전에 파일을 지우고 다시 그 이름과 동일한 다른 DLL로 덮어쓸려구 하는데
:
: 메인이 실행되지 않는 상태에서는 덮어쓰기가 되는데
:
: 메인이 실행중에는 DLL이 버전 업이 되지가 않습니다(DLL을 지운 시점에서도
:
: 요, 메인은 실행중이지만 사용한 DLL은 지운 다음인데도 다른 DLL로 덮어쓰기가 않됩니다)
:
: 메인이 실행 중이라서 그런것 같다구 생각은 드는데 정말 방법이 없을까 해서
:
: 질문 올려 봅니다 ,않되는 것인지 아님 제가 실력이 모자라서 그런건지 답변 부탁 해요
:
: 답변좀 부탁 드립니다
안녕하십니까?
한꼬맹이 입니다.
당연히 DLL을 호출하는 프로그램이 있으면 삭제와 같은 쓰기가 금지되어 있습니다.
일종의 공유위반 이라고 볼수있죠...
다시말해 DLL이 프로그램에 로드되어 있을때 절대로 쓰기가 안됩니다.
그렇다면 로드한 DLL을 메모리에서 해제해주고 지우면 되지않겠습니까?
황진이님이 DLL을 임포팅 하실때 어떤방식으로 하셨는지는 모르겠지만
일반적으로 정적로딩을 많이 쓰지요. 그냥 사용하기 간단하고 프로그램이 종료할때
까지 메로리에 남아 있죠..
그리고 또 한가지 동적로딩이 있습니다. API코딩을 좀 하셔야 하기 때문에
약간 어렵지만 DLL이 필요없을때 메모리에서 즉각 해제할수 있으므로
많은 융통성을 가지고 있습니다.
이중에서 반드시 동적로딩을 사용하세요...
DLL파일을 업그레이드 할때 메모리에 올려진 DLL을 해제시켜주고
지우거나 오버와이팅로 DLL파일을 업그레이드 해주시면 되겠네요...
그리고 다시 DLL을 사용하시려면 동적로딩으로 해주시면 됩니다.
그럼 도움되시길...
|