Я создал 64-битный проект C ++ в Visual Studio 2010 (под Windows 7 64-битной);
Я думал, что я запускаю 64-битное приложение, и вернулся следующий код правда:
bool is64bit = (sizeof(void*)==8);
но если бы я вызвал функцию IsWow64Process
вернулся ЛОЖНЫЙ…
Более странные вещи:
LoadLibrary()
загрузить dll под c:\windows\system32\some.dll
работает хорошоc:\windows\sysWow64\some.dll
потерпит неудачу (код ошибки 193: some.dll не является приложением win32)Все эти ошибки указывают на то, что приложение работает в 32-битном режиме,
но это против правды тип указателя имеет длину 8 байт
Я в замешательстве, любая помощь будет оценена!
вызов 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-битной.
Нажмите Ctrl-Shitf-Esc
запустить приложение Task Manager. На вкладке «Процессы» вы увидите *32
метка по имени каждого 32-битного процесса.
Это один из самых простых способов проверки разрядности процесса.