原文: http://www.vckbase.com/document/viewdoc/?id=1546
二、原理
持续性,也叫永久性。组件方提供 IPersistXXX 接口,调用者(容器)提供存储介质,比如文件啦、内存啦、注册表啦、流啦
、文本啦......啦啦拉。需要保存的时候,调用者通过 IPersistXXX::Save() 接口函数让组件去自己存储属性信息,而调用者根本
不用关心存储格式和存储内容;需要还原状态的时候,调用者打开存储介质,然后同样调用 IPersistXXX::Load() 接口函数让组件
自己去读取属性信息并完成初始化的设置。
接口:
IPersist 根
IPersistStream 用流操作
IPersisitStreamInit
IPersistMemory 内存块 非流
IPersistStorage 多个流
IPersistFile 文件
IPersistPropertyBag 属性包
IPersistPropertyBag2 属性包升级版
IPersistMoniker Moniker
IPersistHistory WEB
三、持续性接口组件的实现
四、小结
1.实现起来跟之前一样,创建ATL->A,在创建的接口上添加父类(流),创建个功能接口,实现父类虚函数及功能函数
编译他生成tlb
2.创建测试客户端,引用tlb 初始化COM,
建立复合文件 建立流(使用系统的COM接口)
3.当我们操作A后想要保存A中数据的时候,
由于我们的A有个流的父类,且我们也已经实现了save这些函数
所以可以直接在客户端中调用A->save保存流,
把要存的路径、文件信息传递过去(就是刚刚创建的复合文件 流信息)
4.这样 在ATL A中,把它的一些信息写入到了复合文件中,
下次一调用读取,就还原啦!