一直搞不清楚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);

rclsid
[in] 用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。即组件的CLSID值,也就是组件类的CLSID.
pUnkOuter
[in] 如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。一般为NULL
dwClsContext
[in] 组件类别. 可使用CLSCTX枚举器中预定义的值.
可选取值如下:
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
riid
[in] 引用接口标识符,用来与对象通信。即所需接口的IID值
ppv
[out] 用来接收指向接口地址的指针变量。如果函数调用成功,*ppv包括请求的接口指针。即返回的所需要的接口的指针
返回值
S_OK

本文转载自且有示例: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组件宏观认识的更多相关文章

  1. 千万用户级别应用系统背后的SOA组件化容器

    背景 在<我们的应用系统是如何支撑千万级别用户的>随笔中已经从“宏观”角度去介绍了整个应用系统的布局.组件化是整个系统由头到尾都始终坚持的一个设计原则,其中“SOA组件化容器”也是我们应用 ...

  2. Tomcat系列(4)——Tomcat 组件及架构详细部分

    核心部分   1. 定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...

  3. Tomcat系列(3)——Tomcat 组件及架构核心部分 4类主要组件(顶层,连接器,容器,嵌套)

    1.架构图 2. 定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...

  4. SAM宏观生态学空间分析帮助文档

    宏观生态学分析软件帮助文档: 引言: 该软件是由布鲁塞尔..大学开发,目的是提供一个综合的空间分析计算平台,主要针对的是宏观生态学数据.该软件可以从网站...上自由获取,该软件的主要特征以及发表在20 ...

  5. 【bootstrap组件】几个常用的好用bs组件

    这次开发了个小TRS系统,虽然是很小,但是作为初心者,第一次用到了很多看起来洋气使用起来有相对简单的各种前端(主要是和bootstrap配合使用)组件.包括bootstrap-select2,boot ...

  6. UML之组件图

    基本概念:组件图即是用来描述组件与组件之间关系的一种UML图.组件图在宏观层面上显示了构成系统某一个特定方面的实现结构. 组件图中主要包含三种元素,即组件.接口和关系. 组件图通过这些元素描述了系统的 ...

  7. Kubernetes学习之路(二十)之K8S组件运行原理详解总结

    目录 一.看图说K8S 二.K8S的概念和术语 三.K8S集群组件 1.Master组件 2.Node组件 3.核心附件 四.K8S的网络模型 五.Kubernetes的核心对象详解 1.Pod资源对 ...

  8. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

  9. beeshell —— 开源的 React Native 组件库

    介绍 beeshell 是一个 React Native 应用的基础组件库,基于 0.53.3 版本,提供一整套开箱即用的高质量组件,包含 JavaScript(以下简称 JS)组件和复合组件(包含 ...

随机推荐

  1. iOS 一些struct类型的NSLog输出

    我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringial.x 和frame.size.width来做NSLog参数好麻烦,还好苹果对这些常用 ...

  2. WCF TCP通信方式 通过IIS承载调试

    http://www.cnblogs.com/nikymaco/archive/2012/10/08/2715954.html IIS Express服务器只支持http/https,不支持net.t ...

  3. ReactNative Navigator

    https://facebook.github.io/react-native/docs/navigator.html Navigator实现了页面之间的跳转. Demo描述:打开即进入“课程”页面, ...

  4. FAT12中,如何定位大于一个扇区(512B)的文件内容

    [0]README 0.1)本文旨在于 演示在FAT12中, 如何取定位大于 512B 的文件内容,和查看它: 0.2)如何制作FAT12文件系统,以及如何向文件中添加temp.txt文件,参见: { ...

  5. Android Studio .9图片的应用以及制作

    参考http://www.jianshu.com/p/761f4d0e5d8d 先找到图片右键 然后修改图片名称,选择目录,注意必须要放在drawable目录里面,不然引用studio会报错 然后进入 ...

  6. 【BZOJ4653】[Noi2016]区间 双指针法+线段树

    [BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...

  7. 使用jdk中keytool生成证书

    -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥.私钥和证书 -alias 产生别名 -keystor ...

  8. 题解 P3389 【【模板】高斯消元法】

    题解 P3389 [[模板]高斯消元法] 看到大家都没有重载运算符,那我就重载一下运算符给大家娱乐一下 我使用的是高斯-约旦消元法,这种方法是精度最高的(相对地) 一句话解释高斯约旦消元法: 通过加减 ...

  9. 流畅python学习笔记:第十七章:并发处理二

    本章讨论python3.2引入的concurrent.futures模块.future是中文名叫期物.期物是一种对象,表示异步执行的操作 在很多任务中,特别是处理网络I/O.需要使用并发,因为网络有很 ...

  10. java基础之容器、集合、集合常用方法

    一.容器(Collection):数组是一种容器,集合也是一种容器 java编程中,装其他各种各样的对象(引用类型)的一种东西,叫容器 注意: 1.数组的长度是固定的 2.集合:长度不固定, 可以随时 ...