为什么编译说找不到PIP_ADAPTER_ADDRESSES定义? 我明明已经加了头文件了

werjkk 2011-05-18 03:21:23

#include "stdafx.h"
#include "GetMAC_mfc.h"
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi")
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
PIP_ADAPTER_ADDRESSES * pAddresses = NULL;
PIP_ADAPTER_ADDRESSES * pCurrAddresses = NULL;
ULONG family=AF_UNSPEC;
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;

ULONG outBufLen = sizeof( PIP_ADAPTER_ADDRESSES );
pAddresses = (PIP_ADAPTER_ADDRESSES )HeapAlloc(GetProcessHeap(), 0, outBufLen );

if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW)
{
HeapFree(GetProcessHeap(), 0, pAddresses );
pAddresses = (IP_ADAPTER_ADDRESSES *)HeapAlloc(GetProcessHeap(), 0, outBufLen );
}
printf("address = %s\n",pAddress);
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
}

return nRetCode;
}


为什么会有一堆编译错误,说那几个和网络相关的数据结构找不到呢?

1>------ Build started: Project: GetMAC_mfc, Configuration: Release Win32 ------
1>Compiling...
1>GetMAC_mfc.cpp
1>.\GetMAC_mfc.cpp(10) : error C2065: 'PIP_ADAPTER_ADDRESSES' : undeclared identifier
1>.\GetMAC_mfc.cpp(10) : error C2065: 'pAddresses' : undeclared identifier
1>.\GetMAC_mfc.cpp(11) : error C2065: 'pCurrAddresses' : undeclared identifier
1>.\GetMAC_mfc.cpp(12) : error C2065: 'AF_UNSPEC' : undeclared identifier
1>.\GetMAC_mfc.cpp(13) : error C2065: 'GAA_FLAG_INCLUDE_PREFIX' : undeclared identifier
1>.\GetMAC_mfc.cpp(15) : error C2070: ''unknown-type'': illegal sizeof operand
1>.\GetMAC_mfc.cpp(16) : error C2146: syntax error : missing ';' before identifier 'HeapAlloc'
1>.\GetMAC_mfc.cpp(18) : error C3861: 'GetAdaptersAddresses': identifier not found
1>.\GetMAC_mfc.cpp(21) : error C2065: 'IP_ADAPTER_ADDRESSES' : undeclared identifier
1>.\GetMAC_mfc.cpp(21) : error C2059: syntax error : ')'
1>.\GetMAC_mfc.cpp(23) : error C2065: 'pAddress' : undeclared identifier
1>Build log was saved at "file://f:\mydialog\GetMAC_mfc\Release\BuildLog.htm"
1>GetMAC_mfc - 11 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我用的VC2005sp1. 谢谢!
...全文
1071 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
werjkk 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]

C/C++ code

// MSDN上的例子程序

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x)……
[/Quote]

这个例子好啊。就是好啊,就是好
Eleven 2011-05-18
  • 打赏
  • 举报
回复

// MSDN上的例子程序

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */

int __cdecl main(int argc, char **argv)
{

/* Declare and initialize variables */

DWORD dwSize = 0;
DWORD dwRetVal = 0;

int i = 0;

// Set the flags to pass to GetAdaptersAddresses
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;

// default to unspecified address family (both)
ULONG family = AF_UNSPEC;

LPVOID lpMsgBuf = NULL;

PIP_ADAPTER_ADDRESSES pAddresses = NULL;
ULONG outBufLen = 0;

PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
IP_ADAPTER_PREFIX *pPrefix = NULL;

if (argc != 2) {
printf(" Usage: getadapteraddresses family\n");
printf(" getadapteraddresses 4 (for IPv4)\n");
printf(" getadapteraddresses 6 (for IPv6)\n");
printf(" getadapteraddresses A (for both IPv4 and IPv6)\n");
exit(1);
}

if (atoi(argv[1]) == 4)
family = AF_INET;
else if (atoi(argv[1]) == 6)
family = AF_INET6;

outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);

// Make an initial call to GetAdaptersAddresses to get the
// size needed into the outBufLen variable
if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen)
== ERROR_BUFFER_OVERFLOW) {
FREE(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
}

if (pAddresses == NULL) {
printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");
exit(1);
}
// Make a second call to GetAdapters Addresses to get the
// actual data we want
printf("Memory allocated for GetAdapterAddresses = %d bytes\n", outBufLen);
printf("Calling GetAdaptersAddresses function with family = ");
if (family == AF_INET)
printf("AF_INET\n");
if (family == AF_INET6)
printf("AF_INET6\n");
if (family == AF_UNSPEC)
printf("AF_UNSPEC\n\n");

dwRetVal =
GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);

if (dwRetVal == NO_ERROR) {
// If successful, output some information from the data we received
pCurrAddresses = pAddresses;
while (pCurrAddresses) {
printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",
pCurrAddresses->Length);
printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);
printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);

pUnicast = pCurrAddresses->FirstUnicastAddress;
if (pUnicast != NULL) {
for (i = 0; pUnicast != NULL; i++)
pUnicast = pUnicast->Next;
printf("\tNumber of Unicast Addresses: %d\n", i);
} else
printf("\tNo Unicast Addresses\n");

pAnycast = pCurrAddresses->FirstAnycastAddress;
if (pAnycast) {
for (i = 0; pUnicast != NULL; i++)
pAnycast = pAnycast->Next;
printf("\tNumber of Anycast Addresses: %d\n", i);
} else
printf("\tNo Anycast Addresses\n");

pMulticast = pCurrAddresses->FirstMulticastAddress;
if (pMulticast) {
for (i = 0; pMulticast != NULL; i++)
pMulticast = pMulticast->Next;
printf("\tNumber of Multicast Addresses: %d\n", i);
} else
printf("\tNo Multicast Addresses\n");

pDnServer = pCurrAddresses->FirstDnsServerAddress;
if (pDnServer) {
for (i = 0; pDnServer != NULL; i++)
pDnServer = pDnServer->Next;
printf("\tNumber of DNS Server Addresses: %d\n", i);
} else
printf("\tNo DNS Server Addresses\n");

printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);
printf("\tDescription: %wS\n", pCurrAddresses->Description);
printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);

if (pCurrAddresses->PhysicalAddressLength != 0) {
printf("\tPhysical address: ");
for (i = 0; i < (int) pCurrAddresses->PhysicalAddressLength;
i++) {
if (i == (pCurrAddresses->PhysicalAddressLength - 1))
printf("%.2X\n",
(int) pCurrAddresses->PhysicalAddress[i]);
else
printf("%.2X-",
(int) pCurrAddresses->PhysicalAddress[i]);
}
}
printf("\tFlags: %ld\n", pCurrAddresses->Flags);
printf("\tMtu: %lu\n", pCurrAddresses->Mtu);
printf("\tIfType: %ld\n", pCurrAddresses->IfType);
printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);
printf("\tIpv6IfIndex (IPv6 interface): %u\n",
pCurrAddresses->Ipv6IfIndex);
printf("\tZoneIndices (hex): ");
for (i = 0; i < 16; i++)
printf("%lx ", pCurrAddresses->ZoneIndices[i]);
printf("\n");

pPrefix = pCurrAddresses->FirstPrefix;
if (pPrefix) {
for (i = 0; pPrefix != NULL; i++)
pPrefix = pPrefix->Next;
printf("\tNumber of IP Adapter Prefix entries: %d\n", i);
} else
printf("\tNo IP Adapter Prefix entries\n");

printf("\n");

pCurrAddresses = pCurrAddresses->Next;
}
} else {
printf("Call to GetAdaptersAddresses failed with error: %d\n",
dwRetVal);
if (dwRetVal == ERROR_NO_DATA)
printf("\tNo addresses were found for the requested parameters\n");
else {

if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) & lpMsgBuf, 0, NULL)) {
printf("\tError: %s", lpMsgBuf);
LocalFree(lpMsgBuf);
FREE(pAddresses);
exit(1);
}
}
}
FREE(pAddresses);
return 0;
}
Eleven 2011-05-18
  • 打赏
  • 举报
回复
console程序选择supports MFC类
nalisaki 2011-05-18
  • 打赏
  • 举报
回复
GetMAC_mfc.cpp(10):不是说的是GetMAC_mfc.cpp文件中这几个数据类型找不到吗?在GetMAC_mfc.cpp文件中包含找不到的那些数据类型所在的头文件不行吗?
fish_phenix 2011-05-18
  • 打赏
  • 举报
回复
你使用控制台程序写的吧,
控制台程序比较纠结
一个办法你换成 windows程序,
然后加上 #include "winsock2.h"
#include "iptypes.h"

如果你不换工程就纠结了
要注释掉 #include "windows.h"中的
#include "winsock.h"

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧