PROPERTYKEY::pid 含义

Dar*_*con 3 winapi windows-7 ipropertystorage

有人能解释一下结构中的pid字段PROPERTYKEY是什么吗?微软说只是不要使用0或者1你很好,但是当我需要IPropertyStore在我的代码中实现时这没有帮助。是否pid应该是键的一部分,因此可能存在多个具有相同fmtid但不同的值pid?或者它应该被忽略,所以GetValue应该返回任何匹配的值fmtid,忽略pid?

Sim*_*ier 5

这个 fmtid+pid 组合在历史上与 OLE 相关(是的,那已经很老了)。

当时,fmtid(格式id)就像一个类别,pid(属性id)是类别中的属性标识符。例如,您在此处定义了第一个 FMTID:预定义的属性集格式标识符。这些属性仍然用于 Office 文档(作者、关键字等),因此每个类别都有很多属性(对于很多属性来说 fmtid 很少),但是 fmtid 和 pid 的组合总是使属性在空间和空间中是唯一的星系。

其他 FMTID 出现之后,你可以在 Windows SDK 的 propkey.h 中查看:FMTID_AudioSummaryInformation、FMTID_Volume、FMTID_ShellDetails 等...

今天,对于一些新属性,FMTID 不再具有任何意义。例如System.Contact.Birthday的 fmtid 为 1 76DC63C-2688-4E89-8143-A347800F25E9,id 为47,但 fmtid 没有特殊含义,也没有具体定义,因此实际上可以单独用于 key。

因此,对于给定的属性,您必须考虑键仍然是两者的组合(因此结构名称为:PROPERTYKEY),但您可以使用大于或等于 2 的 pid 定义自己的属性(如官方文档所指定)如果您愿意,可以将 fmtid 作为新的 guid。我个人仍然更喜欢为一组属性定义一个通用的 FMTID。