COM(组件对象模型)
COM :创建和使用组件的标准
(DLL:COM的一种实现)
任何程序都由若干组件构成
组件:实现接口的功能模块
组件特点:(1)动态链接 (2)隐藏(内部)实现(实现语言,实现逻辑)
COM最终目的:动态替换组件
COM库(COM Library):支持组件管理
外部程序/组件 只通过接口访问组件
外部程序/组件只能通过查询接口(QueryInterface)了解组件支持的接口
查询接口(QueryInterface)规则:
(1)(同一组件)总是返回同一IUnknow 指针
(2)外部可获得曾获得的接口
(3)外部可再次获得已获得接口
(4)外部可返回起始接口
(5)可从任意接口获得已获得接口
接口引用计数规则:
(1)返回(接口指针)之前AddRef:返回接口指针的函数内部
(2)(接口指针)赋值之后AddRef
(3)使用完(接口)之后Release
组件使用过程
(1)创建组件对象(CreateInstance):返回IUnknow指针
(2)通过IUnknow指针查询组件中接口(QueryInterface):根据接口ID(IID)返回接口指针
--------------------------------------------------------------------------------------------------------
COM的实现 : DLL
win32使用(只含纯虚函数的)结构体(struct)表示接口(interface)
#define interface struct
(通过)接口指针 调用接口函数:多态调用 实现函数(实现对象+虚表 / 静态实现函数)
多态:按同一种方式处理不同的对象
接口定义了一种内存结构,实现类继承这个结构
接口定义了实现类的虚表结构
接口继承接口, 类实现接口
所有接口 继承 IUnknow接口(查询接口+控制生命周期)
interface IUnknow {
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppInterface) = 0;//查询组件接口
virtual ULONG __stdcall AddRef() = 0;
virtual ULONG __stdcall Release() = 0;
}
一个组件只有一个IUnknow接口
通过类工厂创建组件对象,查询接口
CoCreateInstance (const CLSID& clsid, IUnknown*, DWORD, const IID& iid, void** ppInterface)
(1)CoGetClassObject (const CLSID& clsid, DWORD, COSERVERINFO*, IID_IClassFactory , void** ppInterface)
创建类工厂对象 获取类工厂接口(IClassFactory)
(2)pIClassFactory->CreateInstance (IUnknown*, const IID&, void** ppInterface);
创建组件对象,查询接口
DLL:进程内组件
EXE:进程外组件
COM(组件对象模型)相关推荐
- 组件对象模型:COM
一.组件 (com),是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术.在com构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的 ...
- COM(Componet Object Model_组件对象模型)技术概述
COM(Componet Object Model_组件对象模型)技术概述 转载FDCFDMin 最后发布于2018-09-07 20:33:55 阅读数 2065 收藏 https://blog.c ...
- OLE技术及组件对象模型(COM)
1.OLE技术 Object Linking and Embedding,对象连接与嵌入,简称OLE技术.OLE 不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件"对象&q ...
- 组件对象模型 COM 的 Python 调用
关于COM的基本概念,可参考组件对象模型 COM 的内容,下面主要介绍两种使用 Python 调用 COM 组件的方法. 1 使用 win32com 1.1 环境搭建 首先需要搭建Python的环境, ...
- 逆向分析使用COM组件对象模型的代码
<恶意代码分析实战>第七章实验7-2的程序使用了COM进行联网通信.首先把书上第七章关于COM介绍的原文贴出来: 总结一下,就是说恶意程序有时会通过另一个服务程序提供的接口函数实现一些操作 ...
- com组件和一般dll的区别
这阵子在想一个需要利用com组件的小程序怎么做,突然想起上次去面试的时候考官问过autocad开发时为什么要利用com,而不采用一般的dll呢? 到google上查了一下,许多人也问了一样的问 ...
- php 打开动态链接,php调用com组件-dll文件(动态链接库)
什么是COM? COM(Component Object Model)组件对象模型,是一种跨应用和语言共享二进制代码的方法.是位于DCE RPC上部的对象指向层(关联服务)定义公共的调用协定以允许用不 ...
- ActiveX组件及其注册 (轉)
來自 http://blog.donews.com/ylma/archive/2006/04/03/809179.aspx 二.ActiveX组件的概念 在我们平常的阅读和编程学习中,我们经常可以看到 ...
- 设计数据层组件并在层间传递数据
Angela Crocker.Andy Olsen 和 Edward Jezierski Microsoft Corporation 2002年8月 适用于: Microsoft® .NET ...
最新文章
- ios开发日记- 5 屏幕截图
- Transformer 代码完全解读!
- mysql function加速_MySQL - 函数(FUNCTION)
- 基于DM8168 EVM的智能视频跟踪系统
- 远程管理Hyper-V Server 虚拟机
- spring-data-redis相关api
- 如何合理的规划一次 JVM 性能调优
- UE4中的字符串转换
- 软件工程——理论、方法与实践 之 面相对象分析
- 双11首日全国共揽收快递包裹5.69亿件 同比增长28.54%
- ubuntu wiznote 无法显示内容 只有标题
- linux超级终端root权限,linux超级终端命令
- php 源代码 即时通讯,php开源免费即时通讯源码-目前有哪些完全的开源的PHP,商城代码...
- 手机编写java的软件_手机上可以用来学习编程的软件有哪些?
- jsonp 跨域 java_浅析 JSONP 跨域原理
- 【C++学习笔记】复合类型和const限定符
- 双11万亿流量下的分布式缓存系统 Tair
- 小米台灯突然自己亮了_升级版值不值得买?米家台灯1代1S对比测评
- 从浏览器跳转到前端框架的路由实现
- 神经网络(五)卷积神经网络