2012-10-23 2 views
10

Visual Studio 2010 (Windows 7 64 비트)에서 64 비트 C++ 프로젝트를 만들었습니다. 내가 64 비트 응용 프로그램을 실행하고, 다음과 같은 코드가 사실 반환 생각64 비트 vC++ 프로그램이 32 비트 모드에서 실행되는 것 같습니다.

:

bool is64bit = (sizeof(void*)==8); 

을하지만 기능 IsWow64Process라고한다면, 그것은 FALSE을 ... 반환

더 이상한 것 :

  • LoadLibrary()아래에 dll을로드하려면 56,이 실패합니다 c:\windows\sysWow64\some.dll에서 DLL을로드 잘
  • 작동 (오류 코드 193 : some.dll이 아닌 올바른 Win32 응용 프로그램)

이 모든 실패 응용 프로그램이 32 비트 모드, 에서 실행되는 제안하지만이 진실에 대하여 포인터 유형은 8 바이트 길이

나는 혼란 스럽다, 어떤 도움도 인정 될 것이다!

답변

11

LoadLibrary()를 호출하여 c : \ windows \ system32 \ some.dll 아래에서 dll을로드하면 제대로 작동합니다. c : \ windows \ sysWow64 \ some.dll에서 dll을로드하는 것은 실패합니다.

당신이 말하는 것은 모두 64 비트를 실행하는 것입니다. 윈도우 64 비트에서

System32 폴더는 64 비트 버전을 DLL이의을 포함하고 SysWow64 폴더는 32 비트 버전이 포함되어 있습니다. IsWow64Process이 TRUE를 반환하면 사용자가 64 비트 OS에서 32 비트 응용 프로그램임을 의미합니다.

이것은 폴더의 이름에서 알 수있는 것과 반대이며 이는 혼란 스러울 수 있습니다. 기본적으로 SysWow64 폴더는 "Windows 32 비트 Windows 64 비트"인 WoW64에서 사용하기위한 32 비트 버전입니다. 기본적으로 3238을 실행하면 WoW64 DLL 을 사용하고 실행시 일반 DLL을 사용합니다 64 비트.

+0

+1 OP가 설명하는 모든 내용은 64 비트 OS의 64 비트 응용 프로그램과 100 % 일치합니다. –

+0

@DavidSchwartz 예 - 사람들은 WoW64를 사용하면 32 비트를 실행한다는 것을 의미하기 때문에 혼란스러워합니다. 이는 이름을 부여한 것의 반대입니다.) –

+0

좋은 답변입니다. WoW64와 system32의 차이를 깨닫 자 몇 시간 전에 단호한 두통을 느꼈습니다. – nothrow

3

Ctrl-Shitf-Esc을 눌러 작업 관리자 응용 프로그램을 실행하십시오. "프로세스"탭에서 모든 32 비트 프로세스의 이름으로 *32 레이블을 볼 수 있습니다. 프로세스의 비트를 검사하는 가장 간단한 방법 중 하나입니다.