델파이로 작업중에 의문이 있어 질문합니다.
델파이로 만든 프로그램의 메모리 사용을 점검한 결과
전혀 필요없는 dll인
Ole32.dll, OleAut32.dll의 메모리를 사용하여
이것을 FreeLibrary API를 사용하여 dll사용을
하지 않도록 하였습니다.
그렇게 해서 프로그램에서 사용못하도록 했는데..
(메모리도 사용하지 않네요..)
실행중에는 아무런 문제가 없거든요.. 그런데....
문제는 폼을 종료할 때 Access violation 에러(RunTime 216)가 발생하네요..
그래서.. 아주 철저하게 살펴본 결과..
델파이가 폼을 종료하고 자동으로 메모리를 해제하면서
이미 사용하지 않는 OleAut32.dll을 메모리에서 해제하기위해
또 FreeLibrary를 호출해서
Runtime Eror가 발생하네요..
디버깅한 결과..참조주소(OleAut32)가 Base Address $7FEB0000 ~ ??인데..
종료시 자꾸 위 주소($7FEB13C0)를 프리할려구 하네요..
처음 폼이 시작할 때 FreeLibrary는 UnLoad는 잘 되는데..
왜 자꾸 폼이 종료될때에도 또 해제하려고 하는지?????
혹시..
위의 메모리 참조가 되지 않도록 하는 방법을 알고 계시나요??
API를 보니..FreeLabriry는 자동으로 맵핑된 메모리를 해제한다는데??
아무리 애를 써봐도..
해결이 안되네요..
아시면..
가르쳐 주실 수 있나요??
그럼..
|