0

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

設定する必要があるコンパイラ フラグはありますか? または、他の解決策はありますか?

よろしくお願いします。

4

2 に答える 2

0

どうやら、この特定の関数が適切に機能するためには、_WIN32_WINNT をコンパイラ フラグまたはヘッダー/ソース ファイルのいずれかで定義ステートメントとして自分で定義する必要があります。

を追加する#define _WIN32_WINNT 0x0500と、コードを正常にコンパイルできます。

于 2013-01-13T20:10:15.853 に答える