如何在不遇到包含乘法错误的情况下包含Psapi.h?

时间:2018-01-11 14:28:14

标签: c++ windows include psapi

目前遇到的问题是Winsock.h已经包含在我项目中其他地方的头文件中......

未直接包含标题:

# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)

因此,当我尝试构建时,我收到错误“C1189已经包含Winsock.h”(来自上面代码段中定义的错误消息)。

但是,我需要能够使用parts of the PSAPI来获取有关当前进程的内存使用情况信息。我试图将其包含在我的其他文件中......

我的.cpp文件:

#include <Windows.h>
#include <Psapi.h>

...

SIZE_T getMemoryInfo() {    // The function that needs the includes

    PROCESS_MEMORY_COUNTERS pmc;
    SIZE_T memoryUsed;

    GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc));
    memoryUsed = pmc.WorkingSetSize;

    return memoryUsed;

}

在研究之后我尝试使用WIN32_LEAN_AND_MEAN试图摆脱Winsock.h包含,这有效,但是现在当我尝试使用PROCESS_MEMORY COUNTERS时,我得到一个未定义的符号错误...

“LNK2019未解析的外部符号GetProcessMemoryInfo在函数中引用...”和“LNK1120 1未解析的外部[在myFile中]”

我希望我需要弄清楚如何包含我需要的实际头文件but the Windows docs do not say(和Wikipedia说大多数子标头都不能单独包含,所以这可能是一个问题)。

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>    // Windows specific libraries for collecting software metrics.
#include <Psapi.h>

我一直在努力想出这一整天,任何帮助都会受到赞赏,因为Windows Docs非常无益,而且我非常沮丧。如果这是一个愚蠢的问题,我道歉,但我经常与包括挣扎。

1 个答案:

答案 0 :(得分:1)

终于明白了。

显然,psapi.lib并没有被Visual Studio自动链接(尽管Windows util libs是......)。您必须进入属性/链接器/输入并手动将库添加为依赖项。如果找不到库位置,请在C / C ++中手动添加目录作为搜索目录。

你也必须拥有#define WIN32_LEAN_AND_MEAN。

希望有帮助,如果将来有人需要帮助,请在这里发表评论。

解决方案归功于@RbMn和@Scheff,谢谢你们!