MinGW GCC不识别MEMSTATUSEX?
我正在Windows7上使用MingWGCC编译器。我正在尝试编译包含以下代码的源代码: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
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。你设定了什么?我没有把它设置成任何东西…哦,好的。我定义了它,这就阻止了它。谢谢。你应该在回答自己的问题时说明你是如何定义它的。所以它就从没有答案的名单上消失了,这很公平。我会的。