MinGW GCC不识别MEMSTATUSEX?

MinGW GCC不识别MEMSTATUSEX?,c,api,winapi,gcc,mingw,C,Api,Winapi,Gcc,Mingw,我正在Windows7上使用MingWGCC编译器。我正在尝试编译包含以下代码的源代码: MEMORYSTATUSEX mem_stat; mem_stat.dwLength = sizeof(memstat); BOOL success = GlobalMemoryStatusEx(mem_stat); ram_ptr = &(mem_stat->ullAvailPhys); 我相信您可以猜到,这段代码只是使用GlobalMemoryStatusEx返回的MEMORYSTATU

我正在Windows7上使用MingWGCC编译器。我正在尝试编译包含以下代码的源代码:

MEMORYSTATUSEX mem_stat;
mem_stat.dwLength = sizeof(memstat);
BOOL success = GlobalMemoryStatusEx(mem_stat);
ram_ptr = &(mem_stat->ullAvailPhys);
我相信您可以猜到,这段代码只是使用GlobalMemoryStatusEx返回的MEMORYSTATUSEX结构获取可用内存

当我尝试编译时,出现以下错误:

error: unknown type name 'MEMORYSTATUSEX'
我查看了winbase.h(在MinGW安装包含文件夹中),猜猜我发现了什么

#if (_WIN32_WINNT >= 0x0500)
typedef struct _MEMORYSTATUSEX {
    DWORD dwLength;
    DWORD dwMemoryLoad;
    DWORDLONG ullTotalPhys;
    DWORDLONG ullAvailPhys;
    DWORDLONG ullTotalPageFile;
    DWORDLONG ullAvailPageFile;
    DWORDLONG ullTotalVirtual;
    DWORDLONG ullAvailVirtual;
    DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX,*LPMEMORYSTATUSEX;
#endif
就在那里。我猜这与预编译器if/endif有关,但我不知道如何修复它

更奇怪的是,如果我改用MEMORYSTATUS结构,它就可以正常工作

根据MS文档,两者都有相同的最低客户端版本要求:

记忆状态:

记忆状态:

是否需要设置一些编译器标志?或者有没有其他的解决方案


提前感谢您的帮助

显然,您必须将_WIN32_WINNT自己定义为编译器标志或某个头文件/源文件中的定义语句,才能使此特定函数正常工作


添加
#define\u WIN32\u WINNT 0x0500将允许代码正常编译。

在包含Windows.h之前,添加:

#define WINVER 0x0500
头文件windef.h表示:

/*
 * If you need Win32 API features newer the Win95 and WinNT then you must
 * define WINVER before including windows.h or any other method of including
 * the windef.h header.
 */
然后使用-std=c++11标志编译,如:

g++ -Wall -std=c++11 -c <yourFile>.cpp -o <yourFile>.o
g++-Wall-std=c++11-c.cpp-o.o

您一定注意到它正上方的“if for”WINNT。你设定了什么?我没有把它设置成任何东西…哦,好的。我定义了它,这就阻止了它。谢谢。你应该在回答自己的问题时说明你是如何定义它的。所以它就从没有答案的名单上消失了,这很公平。我会的。