我有这个问题,无法在这个测试代码上解决。
无效参数 候选人是:
?GetProcessMemoryInfo(?, _PROCESS_MEMORY_COUNTERS *, ?(
如何从进程内部确定 CPU 和内存消耗?
我尝试了GetProcessMemoryInfo(GetCurrentProcess((,&info,info.cb(;和 GetProcessMemoryInfo(GetCurrentProcess((,(*PROCESS_MEMORY_COUNTERS(&info,info.cb(;我使用 mingw64 版本明GW-W64-builds-4.2.0gcc 版本 4.9.2 具有: -std=c++1y -O0 -g3 -Wall -c -fmessage-length=0我尝试添加路径和包含,将 -lpaspi 添加到 eclipse 中的 gcc++ 构建参数中,但似乎没有任何帮助。有什么想法吗?
#include <windows.h>
#include <psapi.h>
LPVOID file_version;
HANDLE handle;
PROCESS_MEMORY_COUNTERS_EX info;
MEMORYSTATUSEX memoryInfo;
DWORDLONG totalVirtualMemory;
DWORDLONG virtualMemoryUsed;
SIZE_T virtualMemoryUsedByMe;
DWORDLONG totalPhysicalMemory;
DWORDLONG physicalMemoryUsed;
SIZE_T physicalMemoryUsedByMe;
void init(){
bool error = GetFileVersionInfo("psapi.lib",0,GetFileVersionInfoSize("psapi.h",0),file_version);
info.cb = sizeof(info);
bool okay = GetProcessMemoryInfo(GetCurrentProcess(),(*PROCESS_MEMORY_COUNTERS)&info,info.cb);
memoryInfo.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&memoryInfo);
totalVirtualMemory = memoryInfo.ullTotalPageFile;//Total Virtual Memory:
virtualMemoryUsed = memoryInfo.ullTotalPageFile - memoryInfo.ullAvailPageFile;//Virtual Memory currently used:
}
double GetCurrentValue(){
HANDLE handle = GetCurrentProcess();
info.cb = sizeof(info);
GetProcessMemoryInfo(handle, (PROCESS_MEMORY_COUNTERS*)&info,info.cb);
virtualMemoryUsedByMe = info.PrivateUsage; //Virtual Memory currently used by current process:
totalPhysicalMemory = memoryInfo.ullTotalPhys;//Total Physical Memory (RAM):
physicalMemoryUsed = memoryInfo.ullTotalPhys - memoryInfo.ullAvailPhys;//Physical Memory currently used:
physicalMemoryUsedByMe = info.WorkingSetSize;//Physical Memory currently used by current process:
}
您正在传递一个未初始化的指针 (file_version(。它应该指向缓冲区。有关如何确定所需缓冲区的大小,请参阅 MSDN 文档。