组件对象模子的法则[VC/C++编程]
本文“组件对象模子的法则[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
择要
本文的目的是为利用和实施Microsoft的组件对象模子(COM)供应迅捷的参考.读者若想更好的理解什么是COM,以及躲藏在它的计划及体系中的动机,应当阅读组件对象模子的技术阐明书(MSDN库,技术阐明书).
法则1:必须实现Iunknown
假如一个对象没有至少实现一个最小程度为IUnknown的接口,那它就不是Microsoft的组件对象模子(COM).
接口计划法则
接口必须直接或间接地从IUnknown担当.
接口必须有唯一的辨认(IID).
接口是不变的.一旦分配和公布了IID,接口定义的任何因素都不能被改变.
接口的成员函数应当有HRESULT范例的返回值,使远端构造可报告远程历程调用(RPC)错误的情形.
接口成员函数的字符串参数应当是Unicode.
实现 IUnknown
对象的同一性.这要求对任何特定IUnknown接口的给定对象实例的QueryInterface调用返回相同的物理指针变量.这招致了所谓的两个接口的QueryInterface(IID_IUnknown, ...)和后果的对比,以肯定它们能否为同一对象(COM对象同一性).
静态接口的设置.任何经过QueryInterface来拜候对象的接口的设置,必须是静态而不是动态的.也就是说,假定一旦QueryInterface得到了一个给定的IID,那么它老是对相同的对象(除非有意想不到情形)调用,假定QueryInterface不能得到一个给定的IID,那么随后对相同IID的对象调用一定会失利.
对象完好性.关于可处理的接口设置,必须有反身性,对称性和过渡性.即给定代码以下:
IA * pA = (some function returning an IA*);
IB * pB = NULL;
HRESULT hr;
hr = pA->QueryInterface(IID_IB,&pB); // line 4
Symmetric: pA->QueryInterface(IID_IA, ...) must succeed (a>>a)
Reflexive: If, in line 4, pB was successfully obtained, then
pB->QueryInterface(IID_IA, ...)
must succeed (a>>b, then b>>a).
Transitive: If, in line 4, pB was successfully obtained, and we do
IC * pC = NULL;
hr = pB->QueryInterface(IID_IC, &pC); //Line 7
and pC is successfully obtained in line 7,then
pA->QueryInterface(IID_IC, ...)
must succeed (a>>b, and b>>c,then a>>c).
最小参考服务大小.我们需求实现AddRef来保护一个服务台,它充足大以便支持给定对象的全部接口的2 31 –1有超卓的整体指导服务.一个32-位的无标记整型数满意要求.
Release并不意味着失利.假定客户想知道关于资源已被释放等情形,就必须在调用Release之前利用一些对象接口中的较高的语义.
以上是“组件对象模子的法则[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:C++编码中削减内存缺陷的办法和工具
- ·下一篇文章:计算机短信DIY
- ·中查找“组件对象模子的法则”更多相关内容
- ·中查找“组件对象模子的法则”更多相关内容