Есть ли вызов Windows API, который сообщит мне, работаю ли я на 64-битной ОС? - PullRequest
2 голосов
/ 29 октября 2009

Есть ли вызов Windows API, который сообщит мне, работаю ли я на 64-битной ОС? У меня есть некоторый устаревший код на C ++, который вызывает GetVersionEx для заполнения структуры OSVERSIONINFO, но говорит только (AFAIK) об ОС (Vista, V7 и т. Д.), Но не об архитектуре обработки. Я могу взломать это, просто посмотрев на наличие C: \ Program Files (x86) ..., но это выглядит ужасно. Я уверен, что должен быть API для возврата этой информации.

Ответы [ 4 ]

6 голосов
/ 29 октября 2009

IsWow64Process может быть то, что вы ищете.

3 голосов
/ 29 октября 2009

GetNativeSystemInfo()

1 голос
/ 30 октября 2009

Я нашел этот пост, который, кажется, дает хороший ответ: Определить, является ли текущая версия Windows 32-битной или 64-битной

Я не знаю, почему это не сработало при поиске переполнения стека перед публикацией.

Кстати, лучшее решение для меня - просто проверить переменную среды ProgramW6432.

0 голосов
/ 11 апреля 2016

Решение довольно простое. Если вы компилируете для 64-битной версии, вы уже знаете, что работаете в 64-битной версии Windows. Так что вам нужно только вызвать IsWow64Process при компиляции для 32-битного. Следующая реализация возвращает true, если она работает в 64-разрядной версии Windows:

bool Is64BitPlatform() {
    #if defined(_WIN64)
        return true;  // 64-bit code implies a 64-bit OS
    #elif defined(_WIN32)
        // 32-bit code runs on a 64-bit OS, if IsWow64Process returns TRUE
        BOOL f = FALSE;
        return ::IsWow64Process(GetCurrentProcess(), &f) && f;
    #else
        #error Unexpected platform.
    #endif
}

Это отвечает на вопрос, который вы задали. Ответ на вопрос, который вы должны были задать вместо этого, был опубликован в ответе Джерри Коффина : просто позвоните GetNativeSystemInfo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...