void CGetAdepterInfoDlg::GetInfo(void)
{
PIP_ADAPTER_ADDRESSES pAddresses;
pAddresses = new IP_ADAPTER_ADDRESSES;
ULONG outBufLen = 0;
DWORD dwRetVal = 0; if (GetAdaptersAddresses(AF_INET, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW) 
{
delete pAddresses;
pAddresses = (IP_ADAPTER_ADDRESSES*) malloc(outBufLen);
} if ((dwRetVal = GetAdaptersAddresses(AF_INET, 0,  NULL,  pAddresses, &outBufLen)) == NO_ERROR)
{
while (pAddresses)
{
if (pAddresses->PhysicalAddressLength != 0) 
{
CString sm;
sm.Format(_T("%x"),pAddresses->PhysicalAddress);
this->MessageBox(sm);//这里为什么得不到MAC地址?
}
pAddresses = pAddresses->Next;
}
}
}void CGetAdepterInfoDlg::OnBnClickedButton1()
{
this->GetInfo();
}

解决方案 »

  1.   

    是否跟权限有关系,有些api权限不够获取的信息会不正确,比如获取硬盘序列号,用gueset账户好像获得的就是乱码。
      

  2.   

    如果获取不成功,判断错误码。#include <errno.h>
    printf("Error: get MAC fail, [error=%d, %s]\n", errno, strerror(errno);
      

  3.   

    PhysicalAddress is an array of bytes; you are converting the first part of its offset value to hex. You need to format each byte of the array in turn.
    老外的回复。。