在VC6.0下,使用 GlobalMemoryStatusEx 会出现
'GlobalMemoryStatus' undeclared identifier
解决方法:
动态加载DLL方式调用.
int getTotalRAM(void) { int ret = 0; DWORD v = GetVersion(); DWORD major = (DWORD)(LOBYTE(LOWORD(v))); DWORD minor = (DWORD)(HIBYTE(LOWORD(v))); DWORD build = 0; if (v < 0x80000000) build = (DWORD)(HIWORD(v)); // 定义函数指针 BOOL (__stdcall*GMSEx)(LPMEMORYSTATUSEX) = 0; HINSTANCE hIL = LoadLibrary(L"kernel32.dll"); GMSEx = (BOOL(__stdcall*)(LPMEMORYSTATUSEX))GetProcAddress(hIL, "GlobalMemoryStatusEx"); if(GMSEx) { MEMORYSTATUSEX m; m.dwLength = sizeof(m); if(GMSEx(&m)) { ret = (int)(m.ullTotalPhys>>20); } } else { MEMORYSTATUS m; m.dwLength = sizeof(m); GlobalMemoryStatus(&m); ret = (int)(m.dwTotalPhys>>20); } return ret; }