无法解析的外部符号 _AllocateAndGetTcpExTableFromStack,该怎么解决
无法解析的外部符号 _AllocateAndGetTcpExTableFromStack
枚举系统中的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如下:
尝试修改targetver.h也不行,越修改错误越多
我的代码如下:
------解决方案--------------------
用LoadLibrary和GetProcAddress
枚举系统中的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如下:
- C/C++ code
#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也不行,越修改错误越多
我的代码如下:
- C/C++ code
#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 { //.... } }
------解决方案--------------------
用LoadLibrary和GetProcAddress