COM组件宏观认识
一直搞不清楚COM到底是个什么东西,记录一些个人感想,可能很多错误的,慢慢消化.
一.宏观认识:
1.COM(组件对象模型)是一种标准,规则,要求,即即于建筑设计指标要求.
2.语言无关性,因为是建立在二进制基础上的,也就是说客户调用COM组件时只能看到二进制而看不到未经编译的源代码程序,因此就不用管用什么语言编写的COM组件了.只要该语言编写的东西符合COM的标准就可以了.就相当于不用管房子是什么材料建成的,只要满足坚固安全保温通透漂亮舒适就可以了一样.
3.接口是一组相关函数的集合,记住是集合,是一种独特的数据结构.用关键字interace修饰,大写I开头的标识符表示.COM组建被调用时,COM客户只能看到接口,而接口的实现类对客户是隐藏的.客户要使用COM的功能,就必须找到接口的指针,通过接口指针调用接口函数来实现功能.每个接口都对应着一个128位的GUID(全局统一标识符).当COM组建在计算机中注册后,这个GUID作为公共变量保存在计算机的注册表中,这样,通过GUID计算机就能够找个这个接口了(通过调用CoCreateInstance()函数).
4.COM组件,作为COM接口,COM类及其关系的统称,以dll或exe形式存在.每个COM组件都对应一个GUID号,它的作用是作为该组建的唯一引用,存放在计算机的注册表中,供其他使用该COM组建的程序查找到该组建.因此,COM组件注册的过程就是将组建GUID注册到注册表的过程.
5.COM组件,COM接口和COM类都有唯一的GUID值.
6.COM类实现了COM接口,而每个COM接口都必须继承自IUnknown接口,这就是说,每个接口都可以通过quryinterface()函数查找到其他的接口指针.因为所有的IUnknown都是同一个.
二.组件的使用:
window系统API有个函数叫CoCreateInstance()函数,用于创建组建,返回所需接口指针.
HRESULT _stdcall CoCreateInstance(REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID riid,
LPVOID * ppv);
|
CLSCTX_INPROC_SERVER
|
创建在同一进程中运行的组件。为能够同一进程中运行,
组件必须是在DLL中实现的。
|
|
CLSCTX_INPROC_HANDLER
|
创建进程中处理器。一个进程中处理器实际上是一个
只实现了某个组建一部分的进程中组件。该组件的其他部分将
由本地或远程服务器上的某个进程外组件实现。
|
|
CLSCTX_LOCAL_SERVER
|
创建一个在同一机器上的另外一个进程中运行的组件。
本地服务器是由exe实现的。
|
|
CLSCTX_REMOTE_SERVER
|
创建一个在远程机器上运行的组件。此标志需要分布式
COM正常工作。
|
|
CLSCTX_INPROC
|
CLSCTX_LOCAL_SERVER
CLSCTX_INPROC_HANDLER
|
|
CLSCTX_ALL
|
CLSCTX_INPROC_SERVER
CLSCTX_INPROC_HANDLER
CLSCTX_LOCAL_SERVER
CLSCTX_REMOTE_SERVER
|
|
CLSCTX_SERVER
|
CLSCTX_INPROC_SERVER
CLSCTX_LOCAL_SERVER
CLSCTX_REMOTE_SERVER
|
本文转载自且有示例:https://www.cnblogs.com/fangyukuan/archive/2010/06/11/1756724.html
用ATL创建COM组件的过程:http://www.cnblogs.com/fangyukuan/archive/2010/04/09/1708651.html
COM组件注册步骤及注册的原因:http://blog.csdn.net/jasonliao909/article/details/50505717
COM组件宏观认识的更多相关文章
- 千万用户级别应用系统背后的SOA组件化容器
背景 在<我们的应用系统是如何支撑千万级别用户的>随笔中已经从“宏观”角度去介绍了整个应用系统的布局.组件化是整个系统由头到尾都始终坚持的一个设计原则,其中“SOA组件化容器”也是我们应用 ...
- Tomcat系列(4)——Tomcat 组件及架构详细部分
核心部分 1. 定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...
- Tomcat系列(3)——Tomcat 组件及架构核心部分 4类主要组件(顶层,连接器,容器,嵌套)
1.架构图 2. 定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...
- SAM宏观生态学空间分析帮助文档
宏观生态学分析软件帮助文档: 引言: 该软件是由布鲁塞尔..大学开发,目的是提供一个综合的空间分析计算平台,主要针对的是宏观生态学数据.该软件可以从网站...上自由获取,该软件的主要特征以及发表在20 ...
- 【bootstrap组件】几个常用的好用bs组件
这次开发了个小TRS系统,虽然是很小,但是作为初心者,第一次用到了很多看起来洋气使用起来有相对简单的各种前端(主要是和bootstrap配合使用)组件.包括bootstrap-select2,boot ...
- UML之组件图
基本概念:组件图即是用来描述组件与组件之间关系的一种UML图.组件图在宏观层面上显示了构成系统某一个特定方面的实现结构. 组件图中主要包含三种元素,即组件.接口和关系. 组件图通过这些元素描述了系统的 ...
- Kubernetes学习之路(二十)之K8S组件运行原理详解总结
目录 一.看图说K8S 二.K8S的概念和术语 三.K8S集群组件 1.Master组件 2.Node组件 3.核心附件 四.K8S的网络模型 五.Kubernetes的核心对象详解 1.Pod资源对 ...
- Android开发入门要点记录:四大组件
cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...
- beeshell —— 开源的 React Native 组件库
介绍 beeshell 是一个 React Native 应用的基础组件库,基于 0.53.3 版本,提供一整套开箱即用的高质量组件,包含 JavaScript(以下简称 JS)组件和复合组件(包含 ...
随机推荐
- CSS之BFC
BFC(Block Formatting Context,块格式上下文) 具有BFC特性的元素能够看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素. 在CSS3中.BFC叫做Flow ...
- 动态PPT制作
今天开通的博客,希望以后能够和大家一起分享学习心得.今天也是第一次学习制作动态PPT. 如果想要做成flash那种效果,建议学习下<动画传奇>这本书. 做成flash效果,需要用到动画中的 ...
- USB协议[转]__总结得很好
一 枚举过程:◆ 用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态.◆主机检测设备.◆集线器使用中断通道将事件报告给主机.◆主机发送Get_Port_Status(读端口状态) ...
- centos-64整合nginx和tomcat
centos-64整合nginx和tomcat 分类: Linux 2013-04-25 10:41 128人阅读 评论(0) 收藏 举报 1.安装wget和依赖包 yum install wget ...
- unslider点导航不显示错误
原因是,unslider插件只添加了dots文件并没有设置样式 解决办法 .banner { position: relative; width: 100%; overflow: auto; font ...
- LinkedList 基本示例及源码解析
目录 一.JavaDoc 简介 二.LinkedList 继承接口和实现类介绍 三.LinkedList 基本方法介绍 四.LinkedList 基本方法使用 五.LinkedList 内部结构以及基 ...
- 不安装Oracle客户端也能使用PL/SQL
解压缩 instantclient_12_1 到 D:\Oracle\instantclient_12_1 在文件夹内建立目录, /NETWORK/ADMIN 在该目录下,新建文件tnsnames.o ...
- hadoop 相关工具访问端口(转)
原文:http://www.tuicool.com/articles/BB3eArJ hadoop系统部署时用到不少端口.有的是Web UI所使用的,有的是内部通信所使用的,有的是监控所使用的.实际系 ...
- JS基础知识再整理..........不断更新中
1.JS的五种基本数据类型:字符串.数值.布尔.null.underfined. 2.在JS中,字符串.数值.布尔三种数据类型,有其属性和方法: 3.字符串的三种常用方法[.indexof()..su ...
- rtmp直播拉流客户端EasyRTMPClient TCP窗口大小设计方法
EasyRTMPClient 简介 EasyRTMPClient是EasyDarwin流媒体团队开发.提供的一套非常稳定.易用.支持重连接的RTMPClient工具,以SDK形式提供,接口调用非常简单 ...