@MrCheatEugene
Человек. Учусь кодить.

Почему C++ считает что функция не существует, но библиотека в которой она есть подключена?

Привет.
Пытаюсь считать полное название ОС(например, Windows 10) и вывести его на экран.
Нашёл на китайском форуме решение, немного его переписал, но оно не работает.

Нашёл функцию https://docs.microsoft.com/en-us/windows/win32/api...
GetProductInfo, но компилятор сообщает что она не существует, хотя она есть в sysinfoapi.h компилятора.
Сам Sysinfoapi.h и windows.h я естественно подключил, но ошибка осталась.
Код, вызывающий ошибку:
std::string GetWindowsVersionString()
{
	#include <wincon.h>
	#include <sysinfoapi.h>
	#include <windows.h>
    std::string  winver;
        OSVERSIONINFO osver;
    BOOL bIsWindowsXPorLater;

    ZeroMemory(&osver, sizeof(OSVERSIONINFO));
    osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

    GetVersionEx(&osver);
    PWORD wProductType;
    GetProductInfo(osver.dwMajorVersion,osver.dwMinorVersion,0,0,wProductType);
    if (osver.dwMajorVersion == 10 && osver.dwMinorVersion >= 0 && wProductType != VER_NT_WORKSTATION)  winver = "Windows 10 Server";
    if (osver.dwMajorVersion == 10 && osver.dwMinorVersion >= 0 && wProductType == VER_NT_WORKSTATION)  winver = "Windows 10";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 3 && wProductType != VER_NT_WORKSTATION)  winver = "Windows Server 2012 R2";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 3 && wProductType == VER_NT_WORKSTATION)  winver = "Windows 8.1";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 2 && wProductType != VER_NT_WORKSTATION)  winver = "Windows Server 2012";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 2 && wProductType == VER_NT_WORKSTATION)  winver = "Windows 8";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 1 && wProductType != VER_NT_WORKSTATION)  winver = "Windows Server 2008 R2";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 1 && wProductType == VER_NT_WORKSTATION)  winver = "Windows 7";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 0 && wProductType != VER_NT_WORKSTATION)  winver = "Windows Server 2008";
    if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 0 && wProductType == VER_NT_WORKSTATION)  winver = "Windows Vista";
    if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 2)   winver = "Windows Server 2003";
    if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 1)   winver = "Windows XP";
    if (osver.dwMajorVersion == 5 && osver.dwMinorVersion == 0)   winver = "Windows 2000";
    if (osver.dwMajorVersion < 5)   winver = "unknown";
    return winver;
}

Ошибка: In function 'std::string GetWindowsVersionString()':
[Error] 'GetProductInfo' was not declared in this scope

В чём может быть проблема, и если эту ошибку исправить нельзя, то можно иными методами через C++ получать название ОС(Windows) пользователя?
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
OCTAGRAM
@OCTAGRAM
Эта функция появилась минимум в Windows Vista, а в WinAPI SDK при помощи препроцессора управляется видимость новых функций. Вам какого-то DEFINE может не хватать, чтоб указать, WinAPI какой минимум версии Windows вы хотите сделать доступным себе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы