网站开发翻译插件,邢台当地网站建设,个人养老保险缴费查询,windows2008iis部署及发布网站一、COM组件的目标#xff1a; COM组件的一个主要优势是#xff1a;便于升级。 要实现这个优势需要满足一下两个条件#xff1a; 1、运行时从客户程序动态加载和卸载#xff0c;采用DLL技术可以实现。 2、为了更好的突出DLL的优势#xff0c;还需要信息隐藏#xff0c;即…一、COM组件的目标 COM组件的一个主要优势是便于升级。 要实现这个优势需要满足一下两个条件 1、运行时从客户程序动态加载和卸载采用DLL技术可以实现。 2、为了更好的突出DLL的优势还需要信息隐藏即封装性。 二、COM组件的信息隐藏采用IUnknown接口来实现 1、IUnknown接口功能简介 IUnknown意思是未知即未知的接口。采用这个名字是为了简单起见所有的COM接口都需要继承IUnknown因此若某个客户拥有一个IUnknown接口的指针也就不知道接口到底是什么类型的只需要知道此接口可以用来查询其他接口。IUnknown接口有一个用来查询接口的函数QueryInterface。由于所有的COM组件接口都从IUnknown接口继承因此所有的接口都有QueryInterface函数通过QueryInterface可以查询到任何接口因此也就不需要单独维护一个代表组件的指针。 2、QueryInterface功能简介 客户可以通过IUnknown中包含的QueryInterface函数查询某个组件是否支持某个特定的接口。 若支持QueryInterface将返回指向此接口的指针。 否则将返回一个错误代码。 然后客户可以接着查询其它接口或将组件卸载。 3、QueryInterface函数遵循的规则 QueryInterface的实现需要遵循一些规则以便于客户能够获取关于组件的足够多的知识并对之实施一些控制和其他有用的处理。QueryInterface的行为必须是稳定的。 1、QueryInterface返回IUnknown接口时总是返回同一IUnknown指针。 每个组件实例只有一个IUnknown接口因此当查询组件实例的IUnknown接口时不论通过那个接口查询得到的均将是同一指针值。 总结遵循这一规则能确定两个接口是否指向同一组件。 2、客户可以获取曾经得到过的接口。 若对于某个给定的接口QueryInterface曾经成功过那么对于同一组件的后续QueryInterface将总是成功的。 总结若不遵循这一规则客户将无法通过编程的方法来决定组件到底有一些什么样的功能。 3、 可以再次获取已经拥有的接口即通过A接口查询A接口指针。 4、 客户可以从任何接口返回到起始接口即若通过A接口可以查询到B接口那么可以通过B接口查询到A接口对称性。 5、若能够从某接口获取到某特定的接口则从任意的接口都将能获取此接口传递性。 若可以从A接口查询到B接口从B接口查询到C接口那么可以从A接口查询到C接口。 总结这条规则使得QueryInterface是可用的即某接口的查询不是必须依赖于某个接口查询。 总结COM为QueryInterface制定上述规则的目的使为了使QueryInterface使用起来更为简单、更富有逻辑性、更一致及更具确定性。 QueryInterface定义了组件因此是COM最为重要的部分。组件所支持的接口集就是QueryInterface能够返回接口指针的那些接口。 三、COM组件新旧版本的处理 COM组件一旦发布出去接口将永远保持不变。接口不变是指不能改变接口IID但是可以建立一个新的接口同时再为接口指定一个新的IID。 1、COM组件对新旧版本的处理机制 当QueryInterface接受到对老IID查询时返回老的接口。 接收到对新的IID的查询时它将返回新的接口查询。 对QueryInterface而言一个IID就是一个接口所以同某个IID相应的接口绝不会发生变化。 对于老的接口仍然保持不变因此已有客户的运行将不会受到任何影响。 对于新客户则可以自行决定使用老接口还是新接口。 这种处理多个版本的方法最有效的地方在于它是无缝的。客户不需要做任何附加的动作因为接口的标志符同其版本是完全绑定在一块的。 2、建立一个新版本的时机 为了使COM处理多个版本的机制能够起作用当下列条件中的任何一个改变时就应给新接口指定新的IID 1、接口中函数的数目。 2、接口中函数的顺序。 3、某个函数的参数。 4、某个函数的参数顺序。 5、某个函数的参数类型。 6、函数可能的返回值。 7、函数返回值的类型。 8、函数参数的含义。 9、接口中函数的含义。 总结只要是所做的修改为导致已有客户的正常运行都应为接口指定新的IID。 http://www.cnblogs.com/iameasy_man/archive/2009/10/11/1580824.html转载于:https://www.cnblogs.com/newlist/archive/2012/07/05/2577741.html