【发布时间】:2020-10-08 20:47:18
【问题描述】:
我已经成功获得了一个IPropertyBag 用于文件夹的视图状态。我是使用SHGetViewStatePropertyBag 获得的,我通过检查一些属性值确认了这个包是有效的。
如果可能的话,我现在想做的是将属性包作为 blob 保存到磁盘。我一直在包上运行QueryInterface,但我一直无法获得任何有用的接口。不幸的是,属性包似乎不支持IPersistStream 接口。而且我也没有成功查询到IPersistPropertyBag接口。
为属性包获取某种持久接口是否有技巧?还是本质上必须以临时方式单独保存属性?提前感谢您的任何指导。
【问题讨论】:
-
如果没有持久化接口,或者 IPropertBag2::Write 没有实现,这意味着它是一个只读包(Shell 不希望你这样做并破坏它的东西)。我不知道我们可以重用的任何内置 IPersistPropertyBag(2) 实现。因此,您必须枚举属性并以您喜欢的方式保存/读取它们。
-
好的,非常感谢。
-
IPersistStreamInit 怎么样?它与 IPersistStream 非常相似,但实际上并不是从 IPersistStream 派生的。如果所有其他方法都失败了,您可能会查询 IProvideClassInfo 并写出 ITypeInfo(我知道这将是一个 PITA,但如果实施它可能会让您更好地了解实际可用的接口)。
-
@SornelHaetir 谢谢,但
IPersistStreamInit没用。
标签: c++ winapi persist propertybag