2014-06-10 1 views
3

Win32에서 x64 플랫폼으로 프로젝트를 포팅했습니다. 나는 프로젝트를 원활하게 구축 할 수 있도록 모든 종속성을 변경했습니다. 그러나 실행 파일을 시작하자마자 오류 (0xc000007b)이 발생합니다.Visual Studio 2010에서 Win32에서 x64 플랫폼으로 프로젝트를 이식 한 후 잘못된 ComCtl32.dll이로드되었습니다.

특정 지점에서 ComCTL32.dll이로드되었는지, 내가 볼 수 종속성 워커를 사용하지만 예상대로 x86 아닌 x64.

곧 매니 페스트 세대 (linker->Manifestfile)로 바뀌며 작동합니다. 그러나 그것은 해결책이 아닙니다.

내 질문은 : 어디에 Visual Studio 2010 올바른 경로 ComCtl32.dll 경로를 설정할 수 있습니다.

+0

Thx 수정을 위해 Casey – GregPhil

답변

1

어디에서나 경로를 설정하지 마십시오. 매니페스트를 지정하여 원하는 버전의 ComCtrl을 표시 한 다음 다른 DLL처럼 OS에서 찾을 수 있습니다. 표시되는 오류는 64 비트 프로세스가 32 비트 DLL을로드하려고하거나 그 반대의 경우입니다. 그것은 검색 경로 문제 일 수 있습니다. 이는 종속성 문제 일 수 있습니다. 범인을 찾기 위해 DependancyWalker와 같은 도구를 사용하십시오.

6

음, 명백한 문제입니다. 이 문제를 일으킬 수있는 나쁜 예는 다음과 같습니다.

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      processorArchitecture="x86" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
     /> 
    </dependentAssembly> 
</dependency> 

processerArchitecture 속성 값이 중요합니다. 좋은 것은 *을 사용하는데 이는 호환 또는 amd64을 의미합니다. 즉 64 비트을 의미합니다.

+0

안녕 한스, 내 문제를 지적 해 주셔서 감사합니다. 내 머리글에 다음 줄이 있습니다. #pragma comment (linker, "/ manifestdependency : \"type = 'win32'name = 'Microsoft.Windows.Common-Controls'버전 = '6.0.0.0'processorArchitecture = 'x86' publicKeyToken = '6595b64144ccf1df'language = '*'\ "") – GregPhil

관련 문제