【发布时间】:2020-06-23 03:54:50
【问题描述】:
我正在尝试从 Rainmeter API 编辑 PluginSysInfo 以包含 IPv6 支持。我已经修改了 SysInfo.cpp 中的代码,据我所知包含的链接具有我对 SysInfo.cpp 所做的编辑。
当我在 Visual Studio 中构建它时,“标识符 GetTcp6Table 未定义”和“标识符 PMIB_IP6TABLE 未定义”即使它们位于包含文件 #include
#include <algorithm>
#include <windows.h>
#include <WinSock2.h>
...
MEASURE_IP6_ADDRESS
...
else if (_wcsicmp(L"IP6_ADDRESS", type) == 0)
{
defaultData = 0;
measure->type = MEASURE_IP6_ADDRESS;
}
...
case MEASURE_IP6_ADDRESS:
if (NO_ERROR == GetTcp6Table((PMIB_IP6TABLE)tmpBuffer, &tmpBufferLen, FALSE))
{
PMIB_IP6TABLE TcpTable = (PMIB_IP6TABLE)tmpBuffer;
if (measure->useBestInterface)
{
for (UINT i = 0; i < TcpTable->dwNumEntries; ++i)
{
if (TcpTable->table[i].dwIndex == measure->data)
{
DWORD ip = TcpTable->table[i].dwAddr;
wsprintf(sBuffer, L"%x:%x:%x:%x"/*:%x:%x:%x:%x"*/, ip % 65535, (ip >> 8) % 65535, (ip >> 16) % 65535, (ip >> 24) % 65535);
return sBuffer;
}
}
}
【问题讨论】:
-
documentation 表示您需要
#include <iphlpapi.h>。 -
我查看了文档,但我似乎没有将 2 和 2 放在一起。
-
@WhitequillRiclo 函数
GetTcp6Table在iphlpapi.h中声明,而这又需要winsock2.h。如果您打开iphlpapi.h文件,您会在GetTcp6Table的声明之前找到注释“以下定义需要Winsock2”。最初,你#include'd 那些标题之前windows.h,现在你移动它们之后windows.h,但仍然未定义WIN32_LEAN_AND_MEAN导致我的答案末尾引用中解释的冲突。
标签: c++ winapi visual-c++