2011-12-05 1 views
0

Windows XP (32 비트)에서 dll을 사용할 때마다 내가 만든 32 비트 ATL dll에 문제가 있습니다.) 컴퓨터가 경고없이 충돌합니다. 문제는 내가 dll을 컴파일 한 Windows 버전과 관련이 있다고 생각하지만 확실하지 않습니다. 그냥 약간의 역사 :VC++ ATL DLL 충돌 - 32/64 비트 문제와 관련이 있음

처음에는 Visual Studio 2008이 설치된 Windows XP (32 비트) 상자에서 dll을 개발했습니다.이 버전의 dll은 Windows XP (32 비트) 및 Windows 7 (32 비트)에서 정상적으로 작동했습니다. 비트 및 64 비트). 그런 다음 Windows 7 (64 비트) 및 Visual Studio 2010이 포함 된 새로운 개발 상자가 생겼습니다. VS2008 프로젝트를 VS2010으로 변환하고 컴파일 한 다음 Windows 7 (32 비트 및 64 비트) 시스템에서 완벽하게 작동합니다. 그러나 Windows XP (32 비트)에서 실행하면 충돌이 발생합니다.

재미있는 것은 내가 XP 시스템에서 DLL이 성공적으로 regsv32에 수 있었다,하지만 난 종속성 워커를 실행할 때, 그것은 파일의 무리없는 것을 말했다

api-ms-win-core-console-l1-1-0.dll
api-ms-win-core-datetime-l1-1-0.dll
api-ms-win-core-debug-l1-1-0.dll
api-ms-win-core-delayload-l1-1-0.dll
api-ms-win-core-errorhandling-l1-1-0.dll
api-ms-win-core-fibers-l1-1-0.dll
api-ms-win-core-file-l1-1-0.dll
api-ms-win-core-handle-l1-1-0.dll
api-ms-win-core-heap-l1-1-0.dll
api-ms-win-core-interlocked-l1-1-0.dll
api-ms-win-core-io-l1-1-0.dll
api-ms-win-core-libraryloader-l1-1-0.dll
...any many more of the same

I을 윈도우 XP 상자 내 개발 컴퓨터에서 이러한 파일을 모두 복사 지금 종속성 워커는 저에게 말한다 :

Error: The Side-by-Side configuration information for "c:\documents and settings\poibri01\desktop\distributable\WERUI.DLL" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).
Error: Modules with different CPU types were found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

내가 당장은 모른다. 누구든지 나를 도울 수 있습니까?

편집은

  1. 의 Microsoft Visual C++ 2010 재배포 가능 패키지 (x86)는 Windows XP 시스템에 설치됩니다.
  2. DLL을 디버그가 아닌 32 비트 릴리스로 컴파일하고 있습니다.

답변

1

이러한 DLL은 specific to Windows 7이므로 XP에서는 작동하지 않습니다. 난 당신이 윈도우 7에 특정의 매니페스트 파일에 뭔가가 있거나 예 _WIN32_WINNT 또는 WINVER에 최소 버전을 지정하는 하나를 사용, http://msdn.microsoft.com/en-us/library/aa383745%28v=vs.85%29.aspx

매니페스트 파일에서 무엇을 볼 수있는 mt 도구를 참조 의심 :

mt -inputresource:mydll.dll;#1 -out extracted.manifest 
+0

감사합니다. the_mandrill ... 나는 해결책을 찾고 있다고 생각합니다. 내 프로젝트에서 WINVER는 0x0600 (Windows Vista)으로 설정되었으므로 0x0501 (Windows Server 2003, Windows XP)으로 변경했습니다. 다음은 매니페스트 파일의 출력입니다. 내가 DLL에 의존 워커를 실행할 때 HydroPowerDeveloper

+0

그러나, 그것은 여전히 ​​당신이 어떤 생각을해야합니까 ... 윈도우 7 DLL을 참조거야? – HydroPowerDeveloper

+0

Windows XP에서 dll이 여전히 충돌하고 있다는 점을 잊어 버렸습니다. – HydroPowerDeveloper