다음을 통해 공유


IPropertyStorage 독립 실행형 구현

시스템에서 제공하는 독립 실행형 IPropertySetStorage 구현에는 속성 집합 스토리지에서 속성을 읽고 쓰는 인터페이스인 IPropertyStorage 구현이 포함됩니다. IPropertySetStorage 인터페이스는 스토리지에서 속성 집합을 만들고 엽니다. IEnumSTATPROPSTGIEnumSTATPROPSETSTG 인터페이스도 독립 실행형 구현에서 제공됩니다.

IPropertyStorage의 독립 실행형 구현에 대한 포인터를 가져오려면 StgCreatePropStg 함수를 호출하여 새 속성 집합을 만들거나 StgOpenPropStg를 호출하여 기존 속성 집합에 대한 인터페이스 포인터를 얻거나 IPropertySetStorage 독립 실행형 구현의 Create 또는 Open 메서드를 호출합니다.

IPropertyStorage의 독립 실행형 구현은 복합 파일 스토리지 및 스트림뿐만 아니라 모든 스토리지 또는 스트림 개체에 속성 집합을 만듭니다. 독립 실행형 구현은 복합 파일에 의존하지 않으며 구조화된 스토리지의 구현과 함께 사용할 수 있습니다. 이 인터페이스의 복합 파일 구현에 대한 자세한 내용은 IPropertyStorage-Compound 파일 구현을 참조하세요.

사용 시기

IPropertyStorage를 사용하여 단일 속성 집합 내의 속성을 관리합니다. 해당 메서드는 속성 ID와 연결할 수 있는 속성 및 선택적 문자열 이름을 모두 읽고 쓰고 삭제하는 것을 지원합니다. 다른 메서드는 표준 커밋 및 되돌리기 스토리지 작업을 지원합니다. 속성 스토리지와 연결된 시간을 설정하는 메서드와 CLSID를 할당하여 사용자 인터페이스 코드와 같은 다른 코드를 속성 집합과 연결하는 데 사용할 수 있는 메서드도 있습니다. Enum 메서드는 집합의 속성을 열거하는 IEnumSTATPROPSTG의 독립 실행형 구현에 대한 포인터를 제공합니다.

버전 0 및 버전 1 속성 집합 형식

IPropertyStorage의 독립 실행형 구현은 버전 0과 버전 1 속성 집합 serialization 형식을 모두 지원합니다. 자세한 내용은 속성 집합 serialization을 참조하세요. 속성 집합은 버전 0 형식으로 만들어지고 새 기능이 요청되지 않는 한 해당 형식으로 유지됩니다. 이때 형식이 버전 1로 업데이트됩니다.

예를 들어 PROPSETFLAG_DEFAULT 플래그를 사용하여 속성 집합을 만든 경우 해당 형식은 버전 0입니다. 버전 0 형식을 준수하는 속성 형식이 해당 속성 집합에 기록되고 해당 속성 집합에서 읽는 한 속성 집합은 버전 0 형식으로 유지됩니다. 버전 1 속성 형식이 속성 집합에 기록되면 속성 집합이 자동으로 버전 1로 업데이트됩니다. 이후에는 버전 0만 이해하는 구현에서 해당 속성 집합을 더 이상 읽을 수 없습니다.

IPropertyStorage 및 변형 형식

IPropertyStorage의 독립 실행형 구현은 PROPVARIANT 구조체의 vt 멤버에서 VT_UNKNOWN 또는 VT_DISPATCH 변형 형식을 지원하지 않습니다.

SafeArray 내에서 지원되는 변형 형식은 다음과 같습니다. 즉, 이러한 값은 PROPVARIANT 구조체의 vt 멤버에서 VT_ARRAY 결합할 수 있습니다.

IPropertyStorage의 복합 파일 구현에 의해 SafeArray 내에서 지원되는 변형 형식

VT_I1

VT_UI1

VT_I2

VT_UI2

VT_I4

VT_UI4

VT_INT

VT_UINT

VT_R4

VT_R8

VT_CY

VT_DATE

VT_BSTR

VT_BOOL

VT_DECIMAL

VT_ERROR

VT_VARIANT

 

 

VT_VARIANT VT_ARRAY 결합하면 SafeArray 자체는 PROPVARIANT 구조를 보유합니다. 그러나 이러한 요소의 형식은 이전 목록에서 가져와야 하며, VT_VARIANT 수 없으며, VT_VECTOR, VT_ARRAY 또는 VT_BYREF 표시기를 포함할 수 없습니다.

IPropertyStorage 메서드

IPropertyStorage의 독립 실행형 구현은 다음 메서드를 지원합니다.

IPropertyStorage::ReadMultiple

rgpspec 배열에 지정된 속성을 읽고 PROPVARIANT 요소의 rgvar 배열에 있는 모든 유효한 속성의 값을 제공합니다.

시스템에서 제공하는 독립 실행형 구현에서 스트림 또는 스토리지 형식을 참조하는 중복 속성 식별자는 IStorage::OpenStream 또는 IStorage::OpenStorage를 여러 번 호출하며 ReadMultiple의 성공 또는 실패는 열려 있는 스토리지를 공유하는 기본 스토리지 구현의 기능에 따라 달라집니다.

또한 동일한 스트림 또는 스토리지 반환 속성이 동일한 IPropertyStorage 포인터를 통해 여러 번 요청되는 경우 스레드로부터 안전한 작업을 보장하기 위해 속성이 이미 열려 있는지 여부와 기본 파일 시스템이 스트림 또는 스토리지의 여러 열기를 처리하는지 여부에 따라 열기가 성공하거나 실패합니다. 따라서 스트림 또는 스토리지 반환 속성에 대한 ReadMultiple 작업은 항상 IStorage::OpenStream 또는 IStorage::OpenStorage를 호출하여 액세스(예: STGM_READWRITE) 및 공유 값(예: STGM_SHARE_EXCLUSIVE)을 전달합니다.

메서드가 실패하면 rgvar[]에 기록된 값이 정의되지 않습니다. 일부 스트림 또는 스토리지 반환 속성이 성공적으로 열렸지만 실행이 완료되기 전에 오류가 발생하는 경우 메서드가 반환되기 전에 이러한 속성을 해제해야 합니다.

IPropertyStorage::WriteMultiple

rgpspec[] 배열에 지정된 속성을 작성하여 rgvar[]에 지정된 PROPVARIANT 태그 및 값을 할당합니다. 이미 존재하는 속성에는 지정된 PROPVARIANT 값이 할당되고 현재 존재하지 않는 속성이 만들어집니다.

IPropertyStorage::D eleteMultiple

rgpspec[]에 지정된 속성을 삭제합니다.

IPropertyStorage::ReadPropertyNames

rgpropid[] 배열에 지정된 속성 ID와 연결된 기존 문자열 이름을 읽습니다.

IPropertyStorage::WritePropertyNames

rglpwstrName 배열에 지정된 문자열 이름을 rgpropid 배열에 지정된 속성 ID에 할당합니다.

IPropertyStorage::D eletePropertyNames

속성 이름에 NULL을 작성하여 rgpropid 배열에 지정된 속성 ID의 문자열 이름을 삭제합니다.

IPropertyStorage::SetClass

속성 집합 스트림의 CLSID 를 설정합니다. 독립 실행형 구현에서 비임플 속성 집합( IPropertySetStorage::Create에 설명된 대로 스토리지 또는 스트림 반환 속성을 포함할 수 있는 속성)에서 CLSID를 설정하면 IStorage::Stat 호출을 통해 가져올 수 있도록 기본 하위 저장소의 CLSID도 설정됩니다.

IPropertyStorage::Commit

단순 및 비심플 속성 집합 모두에 대해 는 메모리 이미지를 디스크 하위 시스템에 플러시합니다. 또한 비임플 트랜잭션 모드 속성 집합의 경우 이 메서드는 속성 집합에서 IStorage::Commit 을 호출합니다.

IPropertyStorage::Revert

비심플 속성 집합의 경우에만 기본 스토리지의 Revert 메서드를 호출하고 'contents' 스트림을 다시 엽니다. 단순 속성 집합의 경우 는 E_OK 반환합니다.

IPropertyStorage::Enum

IEnumSTATPROPSTG를 구현하는 열거자 개체를 만듭니다. 이 개체를 호출하여 집합의 각 속성에 대한 정보를 제공하는 STATPROPSTG 구조를 열거할 수 있습니다.

이 구현은 전체 속성 집합을 읽고 IEnumSTATPROPSTG::Clone 이 호출될 때 공유할 수 있는 배열을 만듭니다.

IPropertyStorage::Stat

전체 속성 집합에 대한 정보를 포함하는 STATPROPSETSTG 구조체의 멤버를 채웁니다. 반환할 때 구조체에 대한 포인터를 제공합니다.

비심플 스토리지 집합의 경우 이 구현은 IStorage::Stat (또는 IStream::Stat)를 호출하여 기본 스토리지 또는 스트림에서 정보를 가져옵니다.

IPropertyStorage::SetTimes

비심플 속성 집합의 경우에만 는 기본 스토리지에서 지원하는 시간을 설정합니다. 이 SetTimes 구현은 기본 스토리지의 IStorage::SetElementTimes 메서드를 호출하여 시간을 수정합니다. 수정 시간, 액세스 시간 또는 생성 시간이 될 수 있는 기본 메서드에서 지원하는 시간을 지원합니다.

IPropertySetStorage 독립 실행형 구현

IPropertyStorage

IStorage::SetElementTimes

StgOpenPropStg

StgCreatePropStg

StgCreatePropSetStg