获取本机MAC地址,要加载外部头文件iphlpapi.h,但是头文件加载顺序不对,会出现很多错误,类似这样的错误:
c:\program files (x86)\microsoft visual studio\vc98\include\mprapi.h(173) : error C2501: 'WCHAR' : missing storage-class or type specifiers
c:\program files (x86)\microsoft visual studio\vc98\include\mprapi.h(173) : error C2501: 'wszInterfaceName' : missing storage-class or type specifiers
c:\program files (x86)\microsoft visual studio\vc98\include\mprapi.h(174) : error C2146: syntax error : missing ';' before identifier 'hInterface'
c:\program files (x86)\microsoft visual studio\vc98\include\mprapi.h(174) : error C2501: 'HANDLE' : missing storage-class or type specifiers
c:\program files (x86)\microsoft visual studio\vc98\include\mprapi.h(174) : error C2501: 'hInterface' : missing storage-class or type specifiers
。。。。。
以上头文件顺序是
#include "iphlpapi.h"
#include <WINSOCK2.H>
如果把位置换一下:
#include <WINSOCK2.H>
#include "iphlpapi.h"
就没有问题了,也不知道为什么。
以下代码是获取本机MAC地址:
void getMac(BYTE strMac[6])
{
PIP_ADAPTER_INFO pAdapterInfo;
DWORD AdapterInfoSize;
TCHAR szMac[32] = {0};
DWORD Err;
AdapterInfoSize = 0;
Err = GetAdaptersInfo(NULL, &AdapterInfoSize);
if((Err != 0) && (Err != ERROR_BUFFER_OVERFLOW))
{
// TRACE("获得网卡信息失败!");
return ;
}
// 分配网卡信息内存
pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, AdapterInfoSize);
if(pAdapterInfo == NULL)
{
// TRACE("分配网卡信息内存失败");
return ;
}
if(GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize) != 0)
{
//TRACE(_T("获得网卡信息失败!\n"));
GlobalFree(pAdapterInfo);
return ;
}
for(int i=0;i<6;i++)
{
strMac[i]=pAdapterInfo->Address[i];
}
}
获取本机IP地址:
char* getIP()
{
WSAData wsaData;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{
return 0;
}
char host_name[225];
if(gethostname(host_name,sizeof(host_name)) == SOCKET_ERROR)
{
cout<<"error"<<WSAGetLastError()<<" 错误"<<endl;
return NULL;
}
struct hostent *phe=gethostbyname(host_name);
struct in_addr addr;
memcpy(&addr,phe->h_addr_list[0],sizeof(struct in_addr));
return inet_ntoa(addr);
}