동적으로로드 된 & 언로드 DLL에서 COMCTL32.dll> = v6.0 및 MSVCR> = v9.0이 필요합니다. 올바른 버전이로드되었는지 확인하기 위해, 나는 비주얼 스튜디오 프로젝트 설정에서 매니페스트 파일 생성을 가능하게하고, 다른 매니페스트 파일에이 항목을 추가 : 그 FreeLibrary()
다음에 내가 LoadLibrary()
전화 테스트 프로그램에서활성화 컨텍스트에 의해 동적으로로드 된 DLL에서 파일 핸들 누수가 발생했습니다.
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
- C : \ WINDOWS \ WinSxS에 \ x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e
- C : \ WINDOWS \ WinSxS에 \ x86_Microso DLL 및 ProcessExplorer는 다음과 같은 파일 핸들이 유출되었음을 나타냅니다 ft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83 분해 호출 스택 추적에서
나는 LoadLibrary()
에 활성화 컨텍스트를 자동으로 생성하고 해당 폴더의 각 핸들을 여는 것을 배웠다. 그러나 활성화 컨텍스트는 FreeLibrary()
에서 삭제되지 않는 것으로 보입니다.
매니페스트 파일을 제거하고 프로젝트 설정을 설정하여 매니페스트 생성을 사용하지 않으면 이러한 누출이 사라집니다. 그러나이 방법으로이 DLL을 제어 할 수없는 프로세스에서로드하므로 올바른 MSVCR 및 COMCTL을 사용할 수 없습니다.
매니페스트 파일을 제거하지 않고이 누설을 제거하는 방법이 있습니까? ?
감사합니다.
답변 해 주셔서 감사합니다. 이전에, 그리고 모든 LoadLibrary - FreeLibrary 쌍에 대해, ProcessExplorer에 표시된 두 개의 새로운 파일 핸들이 있습니다. 나는 다른 시점에 프로세스 데이터를 저장하고 확실하게 비교했다. – edwinbs