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 |
조건
- 숫자 형식 간에 변환할 때 범위를 벗어난 변환이 실패합니다. instance 경우 부호 없는 형식에 대한 부호 없는 음수 값 또는 65535보다 큰 4 바이트 부호 없는 값이 2 바이트 부호 없는 형식으로 지정됩니다.
- 문자열과 날짜 간에 변환할 때 지역화된 또는 "사람이 읽을 수 있는" 표현이 아닌 정식 문자열 형식이 사용됩니다. 형식은 "yyyy/mm/dd:hh:mm:ss.fff"(year, month, date, hours, minutes, seconds, milliseconds)입니다. 이는 FILETIME 형식에서 지원하는 것보다 정밀도가 낮지만 대부분의 용도로 충분해야 합니다.
- 부동 소수점 숫자와 문자열 간에 변환할 때 현재 로캘의 10진수 구분 기호가 사용됩니다. 이렇게 하면 이러한 값이 서로 다른 로캘 간에 이동되는 파일에 저장될 때 문제가 발생할 수 있습니다.
형식 간의 강제 변환은 속성 관련 정보에 관계없이 수행됩니다. 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 |