第9章 编程工作的简化

 
第9章 编程工作的简化

1、客户端的简化:可使用智能接口指针和C++包装类。

2、智能接口指针:像常规接口指针一样访问组件,将引用计数等细节隐藏起来,并且当程序的执行离开了智能接口指针的作用于之后,相应的接口将被释放掉。不适合封装某个接口或接口集。智能接口指针同组件的聚合类似。

3、C++包装类:对接口进行封装。包装类最佳的一些特性在于它们可以利用C++的一些特性,如重载等。包装类实际上同组件的包容类似。

5、同智能指针不同的是:

(1)不论包装类是否要改变接口的行为,它都必须重新实现它所包装的接口中的所有成员。

(2)包装类可以在调用接口成员函数前后加上新的代码。

6、服务器端的简化:未知接口基类CUnknown和类厂基类CFactory。

7、使用CUnknown和CFactory来编写组件的步骤:

(a)编写实现组件的类。

(1)可以从CUnknown或其他从CUnknown派生的类派生出待实现的组件。

(2)使用DECLARE_IUNKNOWN宏来实现代理未知接口。

(3)在组件的构造函数中初始化CUnknown。

(4)实现NondelegatingQueryInterface,在其中加入此组件支持而其他基类不支持的接口。对于那些组件所不支持的接口,可调用相应的基类。

(5)若需要在构造了组件之后进行其他一些初始化处理,可重载Init函数,如此时可建立被包容及被聚合的组件。

(6)若需要在组件被删除之前进行其他一些情理工作,可重载FinalRelease函数,如此时可以释放那些指向被包容或聚合的组件的指针。

(7)给组件实现一个静态的CreateInstance函数。

(8)实现组件支持的那些接口。

(b)对于待放到同DLL种的其他组件,重复上面的步骤(a)。

(c)编写类厂

 (1)建立一个文件,以包含全局CFactoryData数组g_FactoryDataArray。

(2)定义g_FactoryDataArray数组并用DLL中提供的所有组件的信息填充此组件。

(3)定义变量g_cFactoryDataEntries,其中包含有数组g_FactoryDataArray中组件的个数。

(d)编写一个定义DLL入口点的DEF文件。

(e)将上面所编写的代码同CUNKNOWN.CPP和CFACTORY.CPP一块编译链接。

8、使用智能接口指针来编写客户端和CUnknown、CFactory来编写组件的示例代码:

优快云我的资源中InsideCOM\CHAP09XXX。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值