Я использую MinGW GCC компилятор на Windows 7. Я пытаюсь скомпилировать источник, содержащий следующий код:MinGW GCC Не распознает MEMSTATUSEX?
MEMORYSTATUSEX mem_stat;
mem_stat.dwLength = sizeof(memstat);
BOOL success = GlobalMemoryStatusEx(mem_stat);
ram_ptr = &(mem_stat->ullAvailPhys);
Я уверен, что вы можете догадаться, этот код просто получает доступную память с помощью MEMORYSTATUSEX struct, возвращаемая GlobalMemoryStatusEx.
Когда я пытаюсь скомпилировать, я получаю эту ошибку:
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
Есть ли какой-нибудь компилятор флаг мне нужно установить? Или у кого-нибудь есть другие решения?
Заранее благодарим за вашу помощь!
Вы, должно быть, заметили #if для _WIN32_WINNT прямо над ним. К чему вы это настроили? http://msdn.microsoft.com/en-us/library/6sehtctf%28v=vs.90%29.aspx –
Я ничего не задал ... – bgroenks
О, хорошо. Я определил его, и это остановило его. Спасибо. – bgroenks