COM组件相关题目汇总.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

(2016判断)因为任何一个COM组件都有QueryInterface函数,并且COM组件的客户程序在COM组件实例运行过程中可以利用该函数动态查询组件实例的接口并使用,所以,COM组件的客户程序事先并不需要知道COM组件的所有接口,只需运行时对COM组件实例以”先查询后使用”的方式使用即可,这也是COM组件支持动态链接的基本含义.

回答:这题写的是在是太暧昧了,下面的答案我把握不大:

COM组件的客户程序的确不需要知道COM组件的所有接口,但是要对自己即将使用的接口有所了解,例如,客户程序必须知道自己要用的接口的IID,否则将无法使用QueryInterface查找接口,另外,使用者必须清楚自己要使用接口中的什么函数,正常情况下这些信息应该包含在COM组件提供者的文档中,倘若用户只知道某个接口的IID,却对其中有哪些函数并不了解,那么用户即使获取到了正确的接口,也无法调用其中的任何函数,此外,题目描述中的”组件实例”说法实际上很不严谨,但是考虑到这个课程范围内并没有明确区分过接口/实例等概念,我不认为这题是想问这个.

(2016判断)因为任何一个COM组件都支持IUnknown接口,所以,应该对该接口进行单独统一的实现,这样的实现一旦完成,就可以为任何一个COM组件的实现所复用.

回答:IUnknown接口的实现是不能够复用的,一方面反映在QueryInterface函数上,这个函数能返回的全部接口类型,或者称为接口集,对于用户来说就是他能接触到的COM组件的全部,不同的COM组件本质上的不同实际上就反应在这里,因为用户并不清楚接口的具体实现是什么,所以如果两个COM组件的QueryInterface返回行为完全一致,那就表示他们是同一个COM组件.所以不同的组件,其IUnknown接口的实现必然不同,另一方面,其中的引用计数必须对每个不同的组件单独生效,如果多个组件共用引用计数,必将引起混乱,所以IUnknown接口的实现是不能复用的,单独同一实现没有意义.

(2016判断)一方面,在设计并实现一个动态链接库时,有时需要提供一个回答该动态链接库能否被卸载的导出函数,假设这样的函数名为F(事实上这样的函数有固定的名称),另一方面,可以把多个COM组件实现在同一个动态链接库中,假设这样的一个动态链接库名为L,在为L实现F时,基本算法是根据L中所有组件的所有实例个数的总和是否为0给出真假返回结果.

回答:一个DLL可以被卸载的前提是它里面提供的组件和类工厂全部停止使用,所以仅仅统计组件的实例总和为0就得出这个DLL可以被卸载是不正确的,必须要同时确认所有的类厂也已经停止使用,在COM中,实现方法是在使用类厂和使用结束时分别调用一组函数对上述记录总个数的变量进行增减,如此便能保证在这个变量为0时,所有的实例已经注销并且所有的类厂都已经停止使用,此时可以卸载DLL

(2016判断)COM组件规范规定了每个COM组件实例都有引用计数器及相关的两个函数AddRef和Release,目的是由组件实例协助操作系统内存管理程序控制组件实例的消亡.其实,为了达到同样的效果,可以采用以他方法取代引用计数方案,例如,如果在类厂接口中增加一个控制组件实例消亡的函数并予以实现,就可以有客户程序通过类厂来控制组件实例的消亡,此方案中组件实例的产生和消亡均可以由客户程序通过类厂灵活控制.

回答:(个人观点,理性采纳)使用类厂进行内存管理有存在很多问题,使得这个方案无法实行.首先,对于一个实例,可能在客户程序中存在多个引用,每个引用都附加了一些对实例中方法的使用,这种情况下,针对实例的计数并不能真实反映上下文中存在的调用点数量;其次,并不是所有的方法调用一定要与实例相关联,例如组件中可以导出静态函数,而静态函数并不与某个特定的实例关联,此时设置在类厂上的计数管理由于没有实例的创建而不被触发,由于这些原因,在类厂处设置的内存管理并不能起到和引用计数相同的作用.

关于静态函数的内容请不要在考试中写,因为这是笔者的开发经验,如果将视野限制在课程范围内,在这套逻辑体系下是不能导出静态函数的.

(2015判断)COM组件的接口是公开的,一个COM组件的客户程序在设计时就已经知道了该组件所提供的全部接口,所以,客户程序没必要利用QueryInterface函数查询该组件的接口,知道了还查,多此一举,所以可以得出结论,COM组件不必提供QueryInterface函数.

回答:首先,客户能够使用COM组件提供的多少功能取决于客户知道COM组件中的多少接口,这是因为往往用户是不知道全部的接口的,例如,一个程序使用了某个COM组件中的一个接口并调用了一个函数,然后这个COM组件升级了,这个函数有了新的实现并添加到了一个新的接口中,这种情况下,很可能在某个客户环境下同时存在

文档评论(0)

浙江工程信息通 + 关注
实名认证
服务提供商

网络工程师持证人

本人已从事浙江省工程咨询5年,对浙江省内工程信息非常熟悉,可获取新建工程相关联系人、设计院、业主等关键信息。另外从事楼宇自控专业已10年,考取了一建二建等资格证书,有关考试方面的问题(考试心得、方法、学习资料等)都欢饮来咨询交流。

领域认证该用户于2023年05月11日上传了网络工程师

1亿VIP精品文档

相关文档