윈도우 프로그래밍

CComVariant(tagVARIANT)을 wstring 혹은 CString으로 변환하기

하늘흐늘 2021. 10. 5. 15:39
반응형

CComVariant(tagVARIANT)는 모든 타입을 다 넣을 수 있는 union 구조체라서 해당 내용을 디버깅해 보기가 까다롭다. 여기서는 간단히 값을 볼 수 있게 wstring이나 CString으로 변환하게 해놓았다.
    
CComVariant(tagVARIANT)는 vt라는 필드를 가지고 있다.
해당 필드는 객체가 어떤 타입의 값을 가지고 있는지 enum 타입으로 가지고 있다.
   
아래 코드는 해당 필드를 이용하여 CComVariant(tagVARIANT) 값을 wstring으로 변환하는 코드다.
윈도우에서 짜는 관계로 편의상 CString의 Format을 이용하였다.
고로 함수의 return 타입을 CString으로 변경하고 조금만 수정하면 CString으로도 변경된다.
참고로 아래 코드는 모든 타입을 지원하지는 않는다. 주요 타입을 지원하니 그 외의 필요 타입은 응용해서 간단히 코드를 추가하면 된다.
    

std::wstring to_wstring(CComVariant& value)
{
	std::wstring result;
	CString format;
	
	switch (value.vt)
	{
	case VT_I4:
		format.Format(L"%d", value.intVal);
		break;

	case VT_UI1:
		format.Format(L"%u", value.cVal);
		break;

	case VT_UI4:
		format.Format(L"%u", value.uintVal);
		break;

	case VT_R8:
		format.Format(L"%f", value.dblVal);
		break;

	default:
		format.Format(L"Unknown: %d", value.vt);
		break;
	}

	result = format;

	return result;
}

 

 

반응형