预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

COM组件设计与应用(十八)——属性包作者:HYPERLINK"mailto:good_yf@sina.com"杨老师 HYPERLINK"http://www.vckbase.com/code/downcode.asp?id=2785"下载源代码一、前言书接HYPERLINK"http://www.vckbase.com/document/viewdoc/?id=1546"\t"_blank"上回,本回着落在介绍属性包IPersistPropertyBag接口的实现方法和调用方式。属性包,是以“名称-值”的方式提供组件持续性的支持,而“名称-值”恰恰又适合于用文本方式来表现。下面的片段是在HTML中插入MicrosoftMonthViewControlActiveX控件后的样式: <objectclassid="clsid:232E456A-87C3-11D1-8BE3-0000F8754DA1"id="MonthView1"> <paramname="_ExtentX"value="9393"> <paramname="_ExtentY"value="4974"> <paramname="_Version"value="393216"> <paramname="ForeColor"value="0"> <paramname="MaxSelCount"value="7"> <paramname="MonthColumns"value="1"> <paramname="CurrentDate"value="38632"> <paramname="MaxDate"value="2958465"> <paramname="MinDate"value="-53688"> </object> 以文本方式保存组件属性,比较直观、容易修改,上面HTML示例中的<paramname="属性名"value="值">就很清晰。下面开始介绍如何在组件中实现IPersistPropertyBag接口。二、组件的实现(1)vc6.0开发步骤1、建立一个工作空间(WorkSpace)。2、在这个工作空间中,建立ATL工程,示例程序工程为Simple18。3、增加ATL对象类,默认全部选项。示例程序中的ATL对象短名称是Property。4、增加一些属性。在以前的章回中,我们只介绍了增加接口函数的方法,由于今天是首次增加接口属性,所以稍微细致一些。步骤是,在ClassView卡片中选择接口(IProperty)后,执行鼠标右键菜单"AddProperty..."5、增加BSTR类型的接口属性str,同样的方式,再增加一个long型的接口属性interger。在示例程序中,这两个属性其实只为演示,并没有实际的意义。6、接口中的属性,多数情况下会对应对象内部的一个成员变量,因此我们现在要添加成员变量。选择对象类名,执行鼠标右键菜单"AddMemberVariable...."7、添加两个成员变量,一个是CComBSTRm_str对应于接口属性str;另一个是longm_integer对应于接口属性integer。(2)vc.net开发步骤1、建立一个空白解决方案。2、在解决方案中,新增ATL项目。示例程序中项目名称叫Simple18,注意不要选择“属性化编程”方式。3、添加ATL类。选择“ATL的简单对象”。默认全部选项。示例程序中ATL类短名称为Property,类名称为CMyProperty。(注1)4、增加一些属性。在以前的章回中,我们只介绍了增加接口函数的方法,由于今天是首次增加接口属性,所以稍微细致一些。步骤是,在类视图卡片中选择接口(IProperty)后,执行鼠标右键菜单"添加属性..."5、增加BSTR类型的接口属性str,同样的方式,再增加一个long型的接口属性interger。在示例程序中,这两个属性其实只为演示,并没有实际的意义。6、接口中的属性,多数情况下会对应对象内部的一个成员变量,因此我们现在要添加成员变量。选择对象类名,执行鼠标右键菜单"添加变量...."7、添加两个成员变量,一个是CComBSTRm_str对应于接口属性str;另一个是longm_integer对应于接口属性integer。(3)实现代码至此,我们组件的框架已经完成,下面该完成函数函数的实现了: STDMETHODIMPCxxx::get_str(BSTR*pVal) { *pVal=m_str.Copy(); returnS_OK; } STDMETHODIMPCxxx::put_str(BSTRnewVal) { m_str=newVal; returnS_OK; } STDMETHODIMPCxxx::g