NETAddress is a safearray not a string because an adapter can have multiple IP addresses.
Scan the safe array to extract each value.
Use SafeArrayAccessData to get the array pointer.
This code build a string concatenating all ip addresses found:
std::wstring ConvertArrayToString(VARIANT varArr, WCHAR* lpSeparator)
{
std::wstring strRet;
if((VT_ARRAY|VT_BSTR) != varArr.vt)
return L"";
BSTR* arr = NULL;
LONG nLbound = 0;
LONG nUBound = 0;
SafeArrayGetLBound(varArr.parray, 1, &nLbound);
SafeArrayGetUBound(varArr.parray, 1, &nUBound);
SafeArrayAccessData(varArr.parray, (void **)&arr);
for(int i = 0; i < (nUBound - nLbound + 1); i++)
{
if(0 != i)
strRet += lpSeparator;
strRet += std::wstring(arr[i]);
}
SafeArrayUnaccessData(varArr.parray);
return strRet;
}
In your code replace:
wprintf(L"Name: %-60s MAC: %-20s IP: %-20s\n", Name.bstrVal, MACAddress.bstrVal, NETAddress.bstrVal);
With:
wprintf(L"Name: %-60s MAC: %-20s IP: %-20s\n", Name.bstrVal, MACAddress.bstrVal, ConvertArrayToString(NETAddress, L" - "));
P.S. Thanks to whoever for the downvote...