Было просто интересно, лучше ли использовать функцию IsWow64Process, чем компилировать ее отдельно для 64 бит os. По-прежнему необходимо изменить смещения некоторых адресов, чтобы программа на самом деле оставалась неизменной.
IsWow64Process()
имеет смысл только для 32-битных процессов, потому что он говорит, работает ли этот процесс в 64-битной системе. Процесс по-прежнему полностью 32-битный со всеми последствиями, например, он может загружать только 32-разрядные библиотеки DLL и может использовать только 2 гигабайта памяти.
Обратите внимание, что во многих случаях сделать ваш 64-разрядный код на самом деле не стоит, особенно когда вам нужно отправить 32-битный код, а особенно, в то время как почти все версии Windows позволяют запускать 32-разрядный код. См. Этот ответ для получения более подробной информации.
IsWow64Process()
сообщает вам, что вы - 32-разрядное приложение, работающее на 64-битной системе. Это не делает вас 64-битным приложением.
IsWow64Process
не зависит от платформы.
Я определяю ширину бита, глядя на размер std::ptrdiff_t
:
constexpr /*remove if compiler does not support*/ unsigned long GetProcessBits()
{
return sizeof(std::ptrdiff_t) /*size in bytes*/ * 8U;
}
Это вернет 32, если будет работать в 32-битном режиме, а 64 - в режиме 64 бит.