2013-03-13 1 views
1

누군가 PROPERTYKEY 구조의 pid 필드가 무엇인지 설명 할 수 있습니까? Microsoft는 단지 0 또는 1을 사용하지 않는다고 말하지만 코드는 IPropertyStore을 구현해야 할 때 도움이되지 않습니다. pid은 키의 일부로 간주 되므로 fmtid이면서 pid이 아닌 여러 값이있을 수 있습니까? 아니면 무시해야합니까? GetValuefmtid과 일치하는 값을 반환해야하며 pid을 무시 하시겠습니까?PROPERTYKEY :: pid 의미

답변

3

이 fmtid + pid 조합은 역사적으로 OLE와 관련이 있습니다 (예, 상당히 오래된 것입니다).

그 당시 fmtid (형식 ID)은 카테고리와 유사했으며 PID (속성 ID)는 카테고리의 속성 식별자였습니다. 예를 들어, 여기에 첫 번째 FMTID가 정의되어 있습니다 : Predefined Property Set Format Identifiers. 이러한 속성은 Office 문서 (작성자, 키워드 등)에 여전히 사용됩니다. 따라서 여러 속성 (많은 속성의 경우 fmtid가 적음)이 많았지 만 fmtid와 pid의 조합은 항상 속성을 공간 전체에서 고유하게 만듭니다. 은하. 새로운 속성의 FMTID 아무것도 의미하지 않는다,

오늘 ... FMTID_AudioSummaryInformation, FMTID_Volume, FMTID_ShellDetails 등 :

기타 FMTID에서는 Windows SDK의 propkey.h에에에 모습을 가질 수 있습니다, 이후 등장 더 이상. 예를 들어, System.Contact.Birthday의 fmtid는 1 76DC63C-2688-4E89-8143-A347800F25E9이고 ID는 47이지만 fmtid는 특별한 의미가 없으며 구체적으로 정의되지 않으므로 실제로 키에만 사용할 수 있습니다.

따라서 주어진 속성에 대해 키가 여전히 두 가지 (즉 구조 이름 : PROPERTYKEY)의 조합이라고 생각해야하지만 pid를 사용하여 자신의 속성을 2보다 크거나 같은 것으로 정의 할 수 있습니다 (공식 doc 지정) 및 fmtid를 새로운 guid로 사용하십시오. 필자는 개인적으로 한 그룹의 속성에 대해 하나의 공통 FMTID를 정의하는 것을 선호합니다.

+0

사용자 정의 fmtids에도 pid 0 또는 one을 사용하지 마십시오. –

+1

@ RayayChen - PROPERTYKEY 참조 문서는 실제로 값이 2보다 크거나 같아야 함을 규정합니다. 이는 PID_DICTIONARY 및 PID_CODEPAGE 권한입니까? 나는 이것들이 OLE 복합 기억 장치에 특별한 의미가 있다는 것을 알았지 만, 복합 파일에 사용되지 않았더라도 여전히 금지되어 있습니까? –

+0

예약 된 pid가 예약되어 있습니다. –