【发布时间】:2018-01-11 14:28:13
【问题描述】:
目前遇到的问题是 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 未解析的外部符号 [in 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 非常无用,我感到非常沮丧。如果这是一个愚蠢的问题,我深表歉意,但我经常为包含问题而苦恼。
【问题讨论】:
-
不要混淆编译器和链接器错误,这是完全不同的事情。
LNK2019forGetProcessMemoryInfo说你不包括Psapi.lib或者使用旧的sdk -
@RbMm +1 因为我认为你走在正确的轨道上。但是,恐怕“你不 include
Psapi.lib”是不好的(或者我应该说“不幸”)措辞...... ;-) -
对不起,我是在开玩笑。 RbMm 指出您收到 link 错误。拼写出来:您的
#includes 可能没问题,您也可以使用#define WIN32_LEAN_AND_MEAN进行修复。如果出现链接错误,请检查 lib 文件Psapi.lib是否在库依赖项中。如果是,它可能是旧版本... ...您需要更新的 SDK 才能使用它。 -
您有
GetProcessMemoryInfo说您使用PSAPI_VERSION==1(否则将使用K32GetProcessMemoryInfo名称)。GetProcessMemoryInfo仅存在于psapi.lib中,您需要将其包含为链接器输入 -
如果你包含
psapi.lib- 你永远不会收到关于未解决的GetProcessMemoryInfo或K32GetProcessMemoryInfo的错误(inpedend from version)