当前位置: 首页 > news >正文

涉县手机网站建设公司品牌宣传方案

涉县手机网站建设,公司品牌宣传方案,qq邮箱做网站,线上培训平台搭建可能有些人认为接口上的 COM 接口规则没有必要设计的那么严格,但我想说的是,这些规则的存在是有原因的。 假设你在你的产品代码中新增加了版本号为 N 的接口,由于这个接口是内部使用的,没有任何公开文档。所以你可以随意修改它&a…

可能有些人认为接口上的 COM 接口规则没有必要设计的那么严格,但我想说的是,这些规则的存在是有原因的。

假设你在你的产品代码中新增加了版本号为 N 的接口,由于这个接口是内部使用的,没有任何公开文档。所以你可以随意修改它,而不会打破任何不兼容性。

但是需要注意的是,如果你修改一个接口,则必须要生成一个新的接口标识符(IID),因为一个接口标识符唯一标识了这个接口(正如它的名字所暗示的那样)。

以上这条规则,即使是对于内部接口也是一样。

假设你决定不遵循这一规则,在 N + 1 版本的接口中继续使用 N 版本相同的 IID,由于这是一个内部使用的借口,应该不会造成什么大影响。

直到你需要为这两个版本编写一个补丁,事情就不太妙了。

这个补丁会出现这样的问题:它可以调用 IUnknown::QueryInterface 方法并传入这个 IID,COM 库会返回一些东西。但是你不会知道返回的是 N 版本的接口,还是 N + 1 版本的接口。如果你没有意识到这一点,则你的补丁代码很可能会假设返回的是 N + 1 版本的接口,这个时候,如果实际的接口是 N 版本的话,一些奇怪的事情就会发生。

调试这类问题不太好玩,相信我,修复它也不太容易。

你的补丁必须使用其他一些提示来决定它实际返回的接口。如果程序以前已打过补丁,则需要具有每个补丁的版本号,以便确定所拥有的接口版本。
请注意,此依赖项可以隐藏在其他接口后面。考虑下面的代码:

>> 请移步至 topomel.com 以查看图片 <<

假设你要向 IColorInfo 接口添加一个新方法:

>> 请移步至 topomel.com 以查看图片 <<

由于改变了接口,但同时也改变了IID,所以一切都很好,对吧?
非也!

IGraphicImage 接口依赖于 IColorInfo 接口。当你修改 IColorInfo 接口时,也隐式更改了
IGraphicImage::GetColorInfo 方法,因为返回的接口现在是 N + 1 版本的 IColorInfo 接口。

考虑使用 N + 1 版本的头文件编写的补丁程序。

>> 请移步至 topomel.com 以查看图片 <<

如果针对 N 版本运行,则对
IGraphicImage::GetColorCount 的调用将返回 N 版本的 IColorInfo,并且该版本不支持 IColorInfo::AdjustColor 方法。但无论如何你调用它。结果就是: 访问 N 版本的虚函数表的结尾并造成访问违规。

快速的解决方案是,修改 IGraphicImage 的 IID,以反映它所依赖的 IColorInfo 接口上的更改。

>> 请移步至 topomel.com 以查看图片 <<

更可靠的解决方法是,修改
IGraphicImage::GetColorInfo 方法,以便传递要接收的接口。

>> 请移步至 topomel.com 以查看图片 <<

这允许更改 IGraphicImage 所依赖的接口,而无需更改 IGraphicImage 接口本身。当然,实现需要改变以响应IID_IColorInfo 的新值。但是现在调用者可以放心,因为当它请求接口时,它实际上是在获取它,而不是巧合地具有相同名称的其他东西。

总结

我从过去伤痕累累的经历中只学会了一件事: 接口一经对外发布,就只能扩展,不能再修改。你得为你的客户想想。
成也 COM,败也 COM。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《The COM interface contract rules exist for a reason》

 

http://www.ritt.cn/news/17561.html

相关文章:

  • asp.net 4.0网站开发唯尚广告联盟app下载
  • 广州新塘网站制作推广百度指数功能
  • 网站广告条动画 怎么做网络推广的好处
  • 万网怎么建立网站微信管理助手
  • 域名服务商查询seo知识培训
  • wordpress发布的文章404seo站长工具综合查询
  • 韶关微网站建设网页广告
  • 哈密网站制作公司-哈密网站建设|哈密网络公司|哈密做网站长沙专业竞价优化公司
  • 自建商城网站用什么技术好优化设计电子课本
  • python采集wordpress如何做好关键词的优化
  • 怎么在网站做推广不要钱简述优化搜索引擎的方法
  • 手机自助建站平台免费网站快速被百度收录
  • 艺术培训学校系统网站怎么做网站备案查询
  • 郑州网站建设企业名录西安网站设计开发
  • 做电影网站要怎么样的主机模板下载网站
  • 网页内容修改器seo综合查询工具可以查看哪些数据
  • 怀宁县住房与城乡建设局网站seo营销工具
  • 新浪网站制作建个网站费用多少
  • 做网站排名软件搜索引擎营销优化诊断训练
  • 上海网站建设公司地网站seo推广计划
  • 网站哪里做b2b网站免费推广
  • 俄语网站服务器网页制作软件下载
  • 域名备案注销流程搜索引擎优化培训中心
  • wordpress options framework全网seo
  • 做电商网站费用如何快速被百度收录
  • 有什么做海报网站个人网站制作教程
  • 互联网门户网站建设管理 总结电商网站规划
  • 什么企业网站能自己做建站流程新手搭建网站第一步
  • 建筑人才网官新乡网站优化公司推荐
  • python做网站用什么北京核心词优化市场