这个可以:
// TODO: 获得本机的IP地址。子网掩码。广播地址
STDMETHODIMP CSysInfo::GetIPsAddress(BSTR *pIPAddress,BSTR *pSubnetVal,BSTR *pBroadcastAddr,int* pIPsCounter)
{
wchar_t strIPAddress[1000];
::ZeroMemory(&strIPAddress,sizeof(strIPAddress));
wchar_t strSubnetMask[1000];
::ZeroMemory(&strSubnetMask,sizeof(strSubnetMask));
wchar_t strBroadcastAddr[1000];
::ZeroMemory(&strBroadcastAddr,sizeof(strBroadcastAddr)); char cBuffer[10000];
::ZeroMemory(&cBuffer,sizeof(cBuffer));
PMIB_IPADDRTABLE pTable = (PMIB_IPADDRTABLE)cBuffer;
DWORD dwSize = sizeof(cBuffer);
if(GetIpAddrTable(pTable,&dwSize,FALSE) == NO_ERROR)
{
wchar_t strIPItem[100];
*pIPsCounter = pTable->dwNumEntries;
for(int i=0;i< *pIPsCounter;i++)
{
DWORD addr = pTable->table[i].dwAddr;
DWORD subnet = pTable->table[i].dwMask;
DWORD broadcast = pTable->table[i].dwBCastAddr;
// Filter 127.0.0.1
if (addr != 0x0100007f)
{
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(addr & 0xFF),((addr >> 8) & 0xFF),((addr >> 16) & 0xFF),((addr >> 24) & 0xFF));
wcscat(strIPAddress,strIPItem);
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(subnet & 0xFF),((subnet >> 8) & 0xFF),((subnet >> 16) & 0xFF),((subnet >> 24) & 0xFF));
wcscat(strSubnetMask,strIPItem);
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(broadcast & 0xFF),((broadcast >> 8) & 0xFF),((broadcast >> 16) & 0xFF),((broadcast >> 24) & 0xFF));
wcscat(strBroadcastAddr,strIPItem);
}
}
}
*pIPAddress = SysAllocString(strIPAddress);
*pSubnetVal = SysAllocString(strSubnetMask);
*pBroadcastAddr = SysAllocString(strBroadcastAddr);
return S_OK;
}

解决方案 »

  1.   

    问一下,STDMETHODIMP    wchar_t    PMIB_IPADDRTABLE 代表的是什么样的数据类型,从哪里可以找到类似的数据类型的定义?
    谢谢!!!!!!
      

  2.   

    STDMETHODIMP ::= HRESULT __export __stdcall
    HRESULT ::= long
    wchat_t表示使用Unicode字符
    PMIB_IPADDRTABLE ::= MIB_IPADDRTABLE*
    关于MIB_IPADDRTABLE这个结构可以参考MSDN中API GetIpAddrTable
      

  3.   

    你只要使用PMIB_IPADDRTABLE这个结构以及GetIpAddrTable就可以了。