@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) пользователя?
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
OCTAGRAM
@OCTAGRAM
Эта функция появилась минимум в Windows Vista, а в WinAPI SDK при помощи препроцессора управляется видимость новых функций. Вам какого-то DEFINE может не хватать, чтоб указать, WinAPI какой минимум версии Windows вы хотите сделать доступным себе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы