2009-10-08 9 views
24

64 비트 Windows에서 64 비트 응용 프로그램에서 user32.dll을 pinvoke하는 것은 잘못 되었습니까? 나는 이것을 여러 번 성공적으로 해봤지만 결코 오류가 없었지만 모순 된 것처럼 보인다. 대신 user64.dll을 찾아야합니까?C# 64 비트 시스템에 user32.dll 설치

답변

30

이름이 user32.dll 인 경우 오해의 소지가 있습니다. 전화하고있는 user32.dll의 64 비트 버전입니다. 64 비트 버전은 %windir%\System32\user32.dll에 있습니다.

32 비트 응용 프로그램과의 호환성을 위해 32 비트 버전이 포함되어 있습니다. 위치는 %windir%\SysWOW64\user32.dll입니다. 당신은 dumpbin 유틸리티를 사용하여 검사 할 수 있습니다 :

SYSTEM32 \를 USER32.DLL :

FILE HEADER VALUES 
     8664 machine (x64) 

SysWOW64와 \의 USER32.DLL :

FILE HEADER VALUES 
     14C machine (x86) 
+0

지금 오해의 소지가 있지만 원래 16 ~ 32 비트를 구별하기 위해 명명되었습니다. 하지만 그들은 거의 이름을 바꿀 수 없으며, 너무 많은 것을 깨뜨릴 것입니다 ... –

+0

예. 나는 내 어린 시절 Windows 3.1에서 "USER.EXE"로 인한 일반적인 보호 오류를 분명히 기억합니다. –

+2

System32 디렉터리가 여전히 64 비트 창에서 호출되는 방식을 좋아합니다 :-) – Justin

0

가 동일한 이유에 대한 user64.dll 없다 당신은 단지 설명합니다. 닷넷 프로그램은 CPU 아키텍처에 대해 불가지론적일 수 있으므로 동일한 코드가 x86 및 x64에서 작동해야합니다.
프로그램을 x86 플랫폼으로 가져 가면 여전히 수정없이 실행됩니다.
나는 user32.dll이라는 이름의 시나리오를 염두에 두지 않았을 것입니다.

관련 문제