64-битная версия vС++, похоже, работает под 32-битным режимом

Я создал 64-битный проект С++ в Visual Studio 2010 (под Windows 7 64 бит);

Я думал, что запускаю 64-битное приложение, и следующий код вернул true:

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

но если я вызвал функцию IsWow64Process, она вернула FALSE...

Более странные вещи:

  • вызов LoadLibrary() для загрузки dll в c:\windows\system32\some.dll работает хорошо
  • Загрузка dll в c:\windows\sysWow64\some.dll завершится неудачно (код ошибки 193: some.dll не является допустимым приложением win32)

Все эти ошибки указывают на то, что приложение работает в режиме 32 бит, но это противоречит истине, тип указателя - 8-байтовая длина

Я смущен, любая помощь будет оценена!

Ответ 1

вызов LoadLibrary() для загрузки dll в c:\windows\system32\some.dll работает хорошо; загрузка dll в c:\windows\sysWow64\some.dll завершится неудачно

Все, что вы говорите, предполагает, что вы используете 64-разрядную версию.

В Windows 64bit папка System32 содержит 64-разрядные версии DLL, а папка SysWow64 содержит 32-разрядные версии. Когда IsWow64Process возвращает TRUE, это означает, что вы - 32-битное приложение на 64-битной ОС.

Это противоположность тому, что предлагает имена в папке, что, вероятно, почему это кажется запутанным. В принципе, папка SysWow64 - это 32-разрядные версии для WoW64, которая представляет собой "32-разрядную версию Windows для Windows 64-bit" - в основном, вы используете библиотеки WoW64 при запуске 32-битной и обычных DLL при запуске 64-битной версии.

Ответ 2

Нажмите Ctrl-Shitf-Esc, чтобы запустить приложение Диспетчер задач. На вкладке "Процессы" вы увидите метку *32 по имени каждого 32-битного процесса. Это один из самых простых способов проверки битовости процесса.