Программа 64bit vc ++ работает в 32-битном режиме

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

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

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

но если бы я вызвал функцию IsWow64Processвернулся ЛОЖНЫЙ

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

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

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

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

10

Решение

вызов 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, что означает «Windows 32-bit на Windows 64-bit» — в основном вы используете библиотеки WoW64 когда вы запускаете 32bit, и нормальные библиотеки DLL при запуске 64-битной.

11

Другие решения

Нажмите Ctrl-Shitf-Esc запустить приложение Task Manager. На вкладке «Процессы» вы увидите *32 метка по имени каждого 32-битного процесса.
Это один из самых простых способов проверки разрядности процесса.

3

По вопросам рекламы [email protected]