枚举系统中的TCP连接状况,我测试用3个API.想挑选一种最好的.分别是GetTcpTable,GetExtendedTcpTable,AllocateAndGetTcpExTableFromStack
GetTcpTable---不能获取到进程ID
GetExtendedTcpTable---可以获取进程ID,但是Windows版本至少要Windows XP SP2,Windows Server 2003 SP1
AllocateAndGetTcpExTableFromStack---可以获取进程ID,但MSDN解释说Windows Vista和以后版本不支持
所以我想依据Windows版本分别调用GetExtendedTcpTable或AllocateAndGetTcpExTableFromStack.
问题是编译的时候显示了一个错误"无法解析的外部符号 _AllocateAndGetTcpExTableFromStack"
这问题怎么解决呢?
我当前使用Windows是Windows2003 Sp2企业版+VC2008
项目Windows版本定义文件targetver.h如下:#ifndef WINVER                         // 指定要求的最低平台是 Windows Vista。
#define WINVER 0x0501           // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0501     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif#ifndef _WIN32_WINDOWS          // 指定要求的最低平台是 Windows 98。
#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值,以适用于 Windows Me 或更高版本。
#endif#ifndef _WIN32_IE                       // 指定要求的最低平台是 Internet Explorer 7.0。
#define _WIN32_IE 0x0700        // 将此值更改为相应的值,以适用于 IE 的其他版本。
#endif尝试修改targetver.h也不行,越修改错误越多我的代码如下:#include "Iphlpapi.h"
#pragma comment(lib,"Iphlpapi.lib")
void TestTcpTable() //GetTcpTable,GetExtendedTcpTable,AllocateAndGetTcpExTableFromStack
{
DWORD err;
DWORD sz=1024*1024;
PMIB_TCPTABLE ptt=(MIB_TCPTABLE*)new BYTE[sz];
::memset(ptt,0,sz); err=::GetTcpTable(ptt,&sz,0);
if(err==NO_ERROR)
{
//....
}
//....
err=::GetExtendedTcpTable(ptt,&sz,1,AF_INET,TCP_TABLE_OWNER_PID_ALL,0);
PMIB_TCPTABLE_OWNER_PID pttp=(PMIB_TCPTABLE_OWNER_PID)ptt;
if(err==NO_ERROR)
{
//....
} //... PMIB_TCPTABLE_OWNER_PID pttp2;
PVOID pv;
if(::AllocateAndGetTcpExTableFromStack(&pv,1,::GetProcessHeap(),0,AF_INET)==ERROR_SUCCESS) //这里有个连接错误:error LNK2019: 无法解析的外部符号 _AllocateAndGetTcpExTableFromStack
{
//....
}
}