COM 组件设计与应用(一)
COM 组件设计与应用(一) 一、前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2)。功夫不负有心人,终于买到了我的第一本COM书《OLE2 高级编程技术》,这本800多页的大布头花费了我1/5的月工资呀......于是开始日夜耕读..... 为了让VCKBASE上的朋友,不再经历我曾经的痛苦、不再重蹈我“无头苍蝇”般探索的艰辛、为了VCKBASE的蓬勃发展、为了中国软件事业的腾飞(糟糕,吹的太也高了)......我打算节约一些在 BBS 上赚分的时间,写个系列论文,就叫“COM组件设计与应用”吧。今天是第一部分——起源。 二、文件的存储 传说350年前,牛顿被苹果砸到了头,于是发现了万有引力。但到了二十一世纪的现在,任何一个技术的发明和发展,已经不再依靠圣人灵光的一闪。技术的进步转而是被社会的需求、商业的利益、竞争的压力、行业的渗透等推动的。微软在Windows平台上的组件技术也不例外,它的发明,有其必然因素。什么是这个因素那?答案是——文件的存储。
以上两个方案,都有严重的缺陷,怎么解决那?如果能有一个新方案,能够合并前两个方案的优点,消灭缺点,该多好呀......微软是作磁盘操作系统起家的,于是很自然地他们提出了一个非常完美的设计方案,那就是把磁盘文件的管理方式移植到文件中了------复合文件,俗称“文件中的文件系统”。连微软当年都没有想到,就这么一个简单的想法,居然最后就演变出了 COM 组件程序设计的方法。可以说,复合文件是 COM 的基石。下图是磁盘文件组织方式与复合文件组织方式的类比图: 三、复合文件的特点
四、浏览复合文件 VC6.0 附带了一个工具软件“复合文件浏览器”,文件名是“vc目录\Common\Tools\DFView.exe”。为了方便使用该程序,可以把它加到工具(tools)菜单中。方法是:Tools\Customize...\Tools卡片中增加新的项目。运行 DFView.exe,就可以打开一个复合文件进行观察了(注4)。但奇怪的是,在 Microsoft Visual Studio .NET 2003 中,我反而找不到这个工具程序了,汗!不过这恰好提供给大家一个练习的机会,在你阅读完本篇文章并掌握了编程方法后,自己写一个“复合文件浏览编辑器”程序,又练手了,还有实用的价值。 五、复合文件函数 复合文件的函数和磁盘目录文件的操作非常类似。所有这些函数,被分为3种类型:WIN API 全局函数,存储 IStorage 接口函数,流 IStream 接口函数。什么是接口?什么是接口函数?以后的文章中再陆续介绍,这里大家只要把“接口”看成是完成一组相关操作功能的函数集合就可以了。
为了让大家快速地浏览和掌握基本方法,上面所列表的函数并不是全部,我省略了“事务”函数和未实现函数部分。更全面的介绍,请阅读 MSDN。
示例二:打开一个复合文件,枚举其根存储下的所有对象。六、小结 复合文件,结构化存储,是微软组件思想的起源,在此基础上继续发展出了持续性、命名、ActiveX、对象嵌入、现场激活......一系列的新技术、新概念。因此理解和掌握 复合文件是非常重要的,即使在你的程序中并没有全面使用组件技术,复合文件技术也是可以单独被应用的。祝大家学习快乐,为社会主义软件事业而奋斗:-) 留作业啦...... 注1:踅摸(xuemo),动词,北方方言,寻找搜索的意思。 |
COM 组件设计与应用(一)相关推荐
- ueditor上传组件显示乱码_最全面的移动端 UI组件设计详解:中篇
上一期给大家讲解了<最全面的移动端UI组件设计详解:上篇>,主要分享了:布局组件和导航组件2个部分:这次给大家带来:基础组件.表单组件和反馈组件详解,希望你在设计APP.小程序.H5页面中 ...
- COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)
一.前言 1.与 <COM 组件设计与应用(五)>的内容基本一致.但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对. 2.这第 ...
- vue 新手指引_精通react/vue组件设计之快速实现一个可定制的进度条组件
前言 这篇文章是笔者写组件设计的第四篇文章,之所以会写组件设计相关的文章,是因为作为一名前端优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去"辛勤劳动",而是要根 ...
- 用 C# 做组件设计时的事件实现方法讨论
事件,其实就是将物体的某个过程处理通过委托(delegate, 也就是函数指针) 的方式公开给外部的自定义函数处理. C# 可以使用多播委托,但实际上一般情况下只需要用到单播. 事件需要通过调用到那个 ...
- react ui框架 移动端_你必须要知道的移动端UI组件设计宝典
作为一名UI设计师,我们经常要进行PC端和移动端的设计任务,上一次给大家分享了: <最全Web端UI组件设计详解> ,这次给大家带来移动端UI组件设计详情,尤其在我们APP.小程序.H5页 ...
- COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
原文:http://www.vckbase.com/index.php/wv/1236 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和鼓励,在此一并表示感谢.咳. ...
- react组件设计原则_React组件设计规则
react的目的是将前端页面组件化,用状态机的思维模式去控制组件.组件和组件之间肯定是有关系得,通过合理得组件设计,给每一个组件划定合适得边界,可以有效降低当我们对页面进行重构时对其他组件之间得影响. ...
- 饿了么ui组件中分页获取当前选中的页码值_【Web技术】314 前端组件设计原则
点击上方"前端自习课"关注,学习起来~ 译者:@没有好名字了译文:https://github.com/lightningminers/article/issues/36,http ...
- 【转载】COM 组件设计与应用(四)——简单调用组件
原文:http://vckbase.com/index.php/wv/1211.html 一.前言 同志们.朋友们.各位领导,大家好. VCKBASE 不得了, 网友众多文章好. 组件设计怎么学? 知 ...
最新文章
- Linux 内核启动流程
- 熟悉常用的HDFS操作
- linux:su认证失败
- 鸿蒙股票深度分析,本月华为鸿蒙概念股市回顾分析(3月31日)
- SAP Spartacus的User明细如何通过ngrx-store-devtools被解析出来
- vector容器中清空元素(但原来的元素还在)
- 游戏党,iQOO Neo5这部手机能玩目前流行的大型手游吗?
- Android开发过程中的坑及解决方法收录
- 计算机在线拍照解答,摄影景深在线计算器
- mysql 协议还原_mysql备份还原方案xtrabackup
- plc简易电子计算机设计,PLC-电子计算器设计.doc
- 关于java WEb怎么调用matlab(二)
- AtCoder题解 —— AtCoder Beginner Contest 184 —— E - Third Avenue - BFS
- VS 2015 更换exe的图标
- 计算机硬盘没内存怎么办,怎么处理闲置旧电脑,内存硬盘都是宝,卖了才可惜!...
- ECSHOP最小起订数插件,ECSHOP商品起订数量插件,ECSHOP商品批发限购插件,ecshop商品批发起订量限购插件,ecshop商品购买批发最小起订量数量插件
- 玩转FFmpeg的7个小技巧
- 数据库中的范式:第一范式,第二范式,第三范式
- 平台 DllRegisterServer调用失败
- 图片去栅栏的代码实现
热门文章
- js进阶 11-16 jquery如何查找元素的父亲、祖先和子代、后代
- jQuery validate 如何清除remote验证的缓存 (在select验证时这个bug尤为明显)
- ASP.NET Core 框架源码地址
- 那些容易忽略的事(1) -变量与运算符+
- 【转】InstantClient安装使用
- 三菱PWM格式文件梯形图编码格式
- python requests 示例_Python Requests模块的简单示例
- antd 文本域超长问题_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...
- 用中子与质子组成的二分类系统演化对称性破缺过程
- 一个XOR问题的实例---神经网络的权重到底是如何变化的