Windows 7 で MinGW GCC コンパイラを使用しています。次のコードを含むソースをコンパイルしようとしています。
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 のドキュメントによると、両方の最小クライアント バージョン要件は同じです。
MEMORYSTATUSEX: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589%28v=vs.85%29.aspx
MEMORYSTATUS: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366772%28v=vs.85%29.aspx
設定する必要があるコンパイラ フラグはありますか? または、他の解決策はありますか?
よろしくお願いします。