PropVariantChangeType 함수(propvarutil.h)

PROPVARIANT 구조체로 저장된 값을 다른 변형 형식의 동등한 값으로 강제 변환합니다.

구문

PSSTDAPI PropVariantChangeType(
  [out] PROPVARIANT          *ppropvarDest,
  [in]  REFPROPVARIANT       propvarSrc,
  [in]  PROPVAR_CHANGE_FLAGS flags,
  [in]  VARTYPE              vt
);

매개 변수

[out] ppropvarDest

형식: PROPVARIANT*

이 함수가 성공적으로 반환될 때 강제 변환된 값과 새 형식을 수신하는 PROPVARIANT 구조체에 대한 포인터입니다.

[in] propvarSrc

형식: REFPROPVARIANT

원래 형식으로 표현된 값을 포함하는 원본 PROPVARIANT 구조체에 대한 참조입니다.

[in] flags

형식: PROPVAR_CHANGE_FLAGS

예약됨, 0이어야 합니다.

[in] vt

형식: VARTYPE

값에 대한 새 형식을 지정합니다. 인식된 형식 이름은 아래 표를 참조하세요.

반환 값

형식: HRESULT

성공하면 S_OK 반환하고, 그렇지 않으면 표준 COM 오류 값을 반환합니다. 요청된 강제 변환을 사용할 수 없는 경우 오류가 반환됩니다.

설명

원본 및 대상 PROPVARIANT 구조체 는 별도의 구조체여야 합니다. 원본 PROPVARIANT 데이터를 새 대상 데이터로 덮어쓸 수 없습니다. 이렇게 하면 오류가 발생합니다.

PropVariantChangeType 은 다음과 같이 다음 형식 간에 값을 변환합니다. 숫자는 테이블 다음에 설명된 조건을 참조합니다.

VT_LPWSTR VT_BSTR VT_BOOL VT_FILETIME VT_DATE VT_CLSID
VT_LPWSTR Yes Yes 예(2) 예(2) Yes
VT_BSTR Yes Yes 예(2) 예(2) Yes
VT_BOOL Yes Yes Yes 아니요 아니요 No
VT_I2 Yes Yes Yes 아니요 No
VT_I4 Yes Yes Yes 아니요 No
VT_I8 Yes Yes Yes 아니요 아니요 No
VT_UI2 Yes Yes Yes 아니요 아니요 No
VT_UI4 Yes Yes Yes 아니요 아니요 No
VT_UI8 Yes Yes Yes 아니요 No
VT_R8 예(3) 예(3) Yes No
VT_FILETIME 예(2) 예(2) 아니요 Yes 아니요
VT_DATE 예(2) 예(2) 아니요 Yes 아니요
VT_CLSID Yes Yes 아니요 아니요
 
VT_I2 VT_I4 VT_I8 VT_UI2 VT_UI4 VT_UI8 VT_R8
VT_LPWSTR Yes Yes Yes Yes Yes Yes 예(3)
VT_BSTR Yes Yes Yes Yes Yes Yes 예(3)
VT_BOOL Yes Yes Yes Yes Yes Yes Yes
VT_I2 Yes Yes 예(1) 예(1) 예(1) 예(1)
VT_I4 예(1) Yes 예(1) 예(1) 예(1) 예(1)
VT_I8 예(1) 예(1) 예(1) 예(1) 예(1) 예(1)
VT_UI2 예(1) Yes Yes Yes Yes 예(1)
VT_UI4 예(1) 예(1) 예(1) Yes 예(1)
VT_UI8 예(1) 예(1) 예(1) 예(1) 예(1) 예(1)
VT_R8 예(1) 예(1) 예(1) 예(1) 예(1) 예(1) Yes
VT_FILETIME 아니요 No
VT_DATE 아니요 아니요 아니요 아니요 아니요 No
VT_CLSID 아니요 아니요 No
 

조건

  1. 숫자 형식 간에 변환할 때 범위를 벗어난 변환이 실패합니다. instance 경우 부호 없는 형식에 대한 부호 없는 음수 값 또는 65535보다 큰 4 바이트 부호 없는 값이 2 바이트 부호 없는 형식으로 지정됩니다.
  2. 문자열과 날짜 간에 변환할 때 지역화된 또는 "사람이 읽을 수 있는" 표현이 아닌 정식 문자열 형식이 사용됩니다. 형식은 "yyyy/mm/dd:hh:mm:ss.fff"(year, month, date, hours, minutes, seconds, milliseconds)입니다. 이는 FILETIME 형식에서 지원하는 것보다 정밀도가 낮지만 대부분의 용도로 충분해야 합니다.
  3. 부동 소수점 숫자와 문자열 간에 변환할 때 현재 로캘의 10진수 구분 기호가 사용됩니다. 이렇게 하면 이러한 값이 서로 다른 로캘 간에 이동되는 파일에 저장될 때 문제가 발생할 수 있습니다.
참고 추가 형식은 나중에 지원될 수 있습니다.
 
경우에 따라 벡터(VT_VECTOR)와 배열(VT_ARRAY) 간 변환이 지원됩니다. 지원되는 경우 요소 수는 각각 동일해야 합니다. 단일 값 벡터를 비벡터 값으로 변환할 수 있지만 다중값 벡터는 비벡터 형식으로 변환할 수 없습니다.

형식 간의 강제 변환은 속성 관련 정보에 관계없이 수행됩니다. PSCoerceToCanonicalValue를 사용하여 속성별 강제 변환을 수행해야 합니다. 또한 UI를 위해 값의 문자열 형식이 필요한 경우 PSFormatForDisplay 를 사용하여 값을 문자열로 강제 변환하기 위해 PropVariantChangeType 을 사용하는 대신 로캘 및 속성별 정보에 따라 값의 서식을 지정해야 합니다.

예제

더 큰 프로그램의 일부로 포함할 다음 코드 예제에서는 PropVariantChangeType 을 사용하여 문자열에서 VT_FILETIME 값을 초기화하는 방법을 보여 줍니다.

PROPVARIANT propvarString = {0};
                    
HRESULT hr = InitPropVariantFromString(L"2007/01/30:12:00:00.000", &propvarString);
if (SUCCEEDED(hr))
{
    PROPVARIANT propvarFiletime = {0};

    hr = PropVariantChangeType(&propvarFiletime, propvarString, 0, VT_FILETIME);
    if (SUCCEEDED(hr))
    {
        // propvarFiletime now contains the FILETIME representation 
        // of 1/30/2007 12:00 PM
        PropVariantClear(&propvarFiletime);
    }
    PropVariantClear(&propvarString);
}

요구 사항

요구 사항
지원되는 최소 클라이언트 WINDOWS XP SP2, Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 WINDOWS Server 2003 SP1 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 propvarutil.h
라이브러리 Propsys.lib
DLL Propsys.dll(버전 6.0 이상)
재배포 가능 파일 WDS(Windows 데스크톱 검색) 3.0