MSDN을 찾아 봤지만 debug 상태에서는 값을 확인했는데 어떻게 해서 값을 읽어 올 수 있는지 예제를 찾아 보다가 발견했다. 아래 링크를 들어가 보면 원본을 확인 할 수 있다.
내가 이것을 찾게 된 이유는 CodeProject의 질문과 같이 IP주소를 읽어 오기 위해서였다.
덕분에 좋은 정보를 얻었고 혹시 사라질까봐 내 블로그에 남겨둔다.
https://www.codeproject.com/Questions/884234/How-Do-I-Get-Ip-Address-From-Win-Networkadaptercon
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:
C++
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:
C++
wprintf(L"Name: %-60s MAC: %-20s IP: %-20s\n", Name.bstrVal, MACAddress.bstrVal, NETAddress.bstrVal);
With:
C++
wprintf(L"Name: %-60s MAC: %-20s IP: %-20s\n", Name.bstrVal, MACAddress.bstrVal, ConvertArrayToString(NETAddress, L" - "));
'C++' 카테고리의 다른 글
ConvertBSTRToString 함수 메모리 누수 문제 (0) | 2023.09.14 |
---|---|
ProcessID로 Handle 찾기 및 WM_COPYDATA 처리 문제 (0) | 2021.04.12 |
std::map에서 char array를 key로 사용하기 (0) | 2021.04.08 |
memcmp 바이트 Array 비교를 할 때 사용 (0) | 2021.03.31 |
pointer new, delete, 지역 pointer 변수 오류 (0) | 2017.03.28 |