2009-11-04 20 views

答えて

8

このコードは動作するはずです:あなたが唯一のIPhelperのAPIを習得する必要が

{ 
    ULONG outBufLen = 0; 
    DWORD dwRetVal = 0; 
    IP_ADAPTER_INFO* pAdapterInfos = (IP_ADAPTER_INFO*) malloc(sizeof(IP_ADAPTER_INFO)); 

    // retry up to 5 times, to get the adapter infos needed 
    for(int i = 0; i < 5 && (dwRetVal == ERROR_BUFFER_OVERFLOW || dwRetVal == NO_ERROR); ++i) 
    { 
     dwRetVal = GetAdaptersInfo(pAdapterInfos, &outBufLen); 
     if(dwRetVal == NO_ERROR) 
     { 
      break; 
     } 
     else if(dwRetVal == ERROR_BUFFER_OVERFLOW) 
     { 
      free(pAdapterInfos); 
      pAdapterInfos = (IP_ADAPTER_INFO*) malloc(outBufLen); 
     } 
     else 
     { 
      pAdapterInfos = 0; 
      break; 
     } 
    } 
    if(dwRetVal == NO_ERROR) 
    { 
     IP_ADAPTER_INFO* pAdapterInfo = pAdapterInfos; 
     while(pAdapterInfo) 
     { 
      IP_ADDR_STRING* pIpAddress = &(pAdapterInfo->IpAddressList); 
      while(pIpAddress != 0) 
      { 
          // 
          // <<<< 
          // here pAdapterInfo->Address should contain the MAC address 
          // >>>> 
          // 

       pIpAddress = pIpAddress->Next; 
      } 
      pAdapterInfo = pAdapterInfo->Next; 
     } 
    } 
    free(pAdapterInfos); 
    return false; 
} 
+0

スタックの代わりにmallockを使用してpAdapterInfosを割り当てるのはなぜですか? – user626528

+1

バッファが大きいので、その1つの構造体だけです。ループは、sizeパラメータを更新します。 – Christopher

+0

(はい、この回答は古いと思います)ビットとピースを説明するいくつかのコメントを書くのではなく、このコードが散文でどのように機能するか説明できますか? –

4

...これは例では、あなたが必要なものだけやっとget you startedへのリンクは、あります。

関連する問題