COM 组件设计与应用(十七)持续性 学习笔记

本文详细介绍了组件如何通过实现IPersistXXX接口实现数据的持久化,包括文件、流等多种存储方式,并提供了具体实现步骤和案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


原文: 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中,把它的一些信息写入到了复合文件中,
下次一调用读取,就还原啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值