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)组件和复合组件(包含 ...
随机推荐
- 【Union Find】JAVA implementation
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Scan ...
- oracle 表压缩技术
压缩表是我们维护管理中常常会用到的.以下我们看都oracle给我们提供了哪些压缩方式. 文章摘自"Oracle® Database Administrator's Guide11g Rele ...
- 【转】AngularJs 弹出框 model(模态框)
原文转至 http://blog.csdn.net/violet_day/article/details/17170585 $modal是一个可以迅速创建模态窗口的服务,创建部分页,控制器,并关联他们 ...
- MVC总结--MVC简单介绍以及和WebForm差别
什么是MVC MVC(Model-View-Controller.模型-视图-控制器模式)用于表示一种软件架构模式.它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Cont ...
- C 语言学习 3
[程序3] 题目:一个整数,它加上100后是一个全然平方数.再加上168又是一个全然平方数.请问该数是多少? 1.程序分析:在10万以内推断.先将该数加上100后再开方,再将该数加上268后再开方,假 ...
- RGB颜色空间alpha混合的方法
http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/64454 ...
- mapreduce代码实现入门
mapreduce代码主要包括三个类,map类.reduce类以及测试类! 以wordcount为例, map类为: static class WordMapper extends Mapper< ...
- springcloud和kubernetes对比
由于这两个都不熟,所以在考虑学哪个. 先说结论:都要学,但是重点学k8s,k8s是一个更加完善的解决方案,springcloud被淘汰只是时间的问题. 从自己的经历和网上的文章两方面分析 个人经历: ...
- 九度OJ 1058:反序输出 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8454 解决:3042 题目描述: 输入任意4个字符(如:abcd), 并按反序输出(如:dcba) 输入: 题目可能包含多组用例,每组用例 ...
- 九度OJ 1052:找x (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7335 解决:3801 题目描述: 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数 ...