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-битного процесса.
Это один из самых простых способов проверки битовости процесса.