基于COM接口编程基础I.ppt
COM组件及其设计.ppt

• COM 组件具有若干对外接口(属性和方法),相当于芯片 的“管脚”。根据不同的应用需求,可以有选择地使用 不同的管脚。即使某些管脚被“废弃”,COM组件本身 仍然可继续使用。
四、DNS、MTS
2、MTS工作原理
四、DNS、MTS
3、 MTS的主要功能
MTS是一个基于组件的事务处理系统,用于开发配置和管 理高性能、可测和可靠的Internet及Intranet企业级应 用程序,提供了包括数据连接缓冲、线程管理、事务服 务等多项服务,很好地解决了多客户端利用组件频繁访 问后台数据库等一系列问题。使用好MTS不仅仅是一 个简单的技术问题,还需要运行经验的不断积累。
• 数据服务层 为应用提供数据来源。和以上的两层体系结构不同, 数据库不再和每个活动客户保持一个连接,而是若干个客户通过应 用逻辑组件共享数据库的连接,从而减少了连接次数,提高了数据 服务器的性能和安全性。我们可以根据需要选择Microsoft SQL Server、Oracle或任何与OLE DB或ODBC兼容的数据源。
三、COM组件对象的软件工程方法
(2)对组件进行设计时测试 在VB内部测试:添加一个标准EXE工程
利用VC的ActiveX Control Test Container 对 ActiveX控件进行测试:对控件的注册、注销及 重注册
在注册表中删除:regedit
三、COM组件对象的软件工程方法
3、COM/DCOM组件技术是由Microsoft公司与DEC公司 于 2 0 1 9 年 提 出 的 , COM 代 表 Component Object Model( 组 件 对 象 模 型 ) , DCOM 代 表 Distributed Component Object Model。
com编程

基本元素定义
我们从下往上看。接口只不过是一组函数。这些函数被称为方法。接口名字以大写的I开头,例如C++中的 IShellLink,接口被设计成一个抽象基类,其中只有纯粹的虚拟函数。
接口可以从其它接口继承,这里所说的继承的原理就好像C++中的单继承。接口是不允许多继承的。
coclass(简称组件对象类——component object class)被包含在DLL或EXE中,并且包含着一个或者多 个接口的代码。组件对象类(coclasss)实现这些接口。COM对象在内存中表现为组件对象类(coclasss)的一 个实例。注意COM“类”和C++“类”是不相同的,尽管常常COM类实现的就是一个C++类。
程度 = E意思是错误(error);
描述 = READREGDB是对错误的描述(意思是不能读注册表数据库)。
谢谢观看
如果你在winerror.h头文件中查找错误代码,会看到许多按照[功能]_[程度]_[描述]命名规范列出的 HRESULT值,由组件返回的通用的HRESULT(类似E_OUTOFMEMORY)在名字中没有功能码。
如:REGDB_E_READREGDB:
功能码 = REGDB,指“注册表数据库(registry database)”;
Hale Waihona Puke 处理HRESULT处理HRESULT
这一部分准备用SUCCEEDED和 FAILED宏进行一些简单的出错处理。主要是深入研究从COM方法返回的 HRESULT,以便达到完全理解和熟练应用。
HRESULT是个32位符号整数,其非负值表示成功,负值表示失败。HRESULT有三个域:程度位(表示成功或 失败),功能码和状态码。功能码表示HRESULT来自什么组件或程序。微软给不同的组件多赋予功能码,如:COM、 任务调度程序等都有功能码。功能码是个16位的值,仅此而已,没有其它内在含义;它在数字和意义之间是随意 关联的;类似GetLastError()返回的值。
COM实用入门教程第一讲

现实中的组件与接口
接口的定义:是组件与组件之间,组件与外部事 物之间进行交互的协议。
这一讲,主要讲解如下要点:
• 一、现实中的组件与接口; • 二、把现实中的思想融入到软件中; • 三、C++程序中的组件与接口; • 四、COM组件与COM接口; • 五、QueryInterface函数,HRESULT类型,IID类型,
数据类型转换。
C++程序中的组件与接口
• 接口,是一种约定,一种协议。它是抽象的,指明了 具体含义,但却没有实现这个定义。 我们看一下C++的纯虚函数:求最大公约数,virtual int GreatestCommonDivisor(int a, int b) = 0; //求a 与b的最大公约数。
• 下面我简单地讲解COM组件的三个优点。
COM组件的优点
• 采用COM组件架构我们的软件,会使我们更方便地进 行模块划分,而且各模块独立性高,耦合度低,从而 更方便地进行开发任务的分工。(开发性)
• 采用COM组件架构我们的软件,会使我们更方便地维 护、升级软件,因为我们可以很方便地直接用新模块 替换旧模块,而不影响软件的其它功能。(维护性)
本讲要点:
• 一、现实中的组件与接口; • 二、把现实中的思想融入到软件中; • 三、C++程序中的组件与接口; • 四、COM组件与COM接口; • 五、QueryInterface函数,HRESULT类型,IID类型,
数据类型转换。
现实中的组件与接口
COM技术及OPC技术

❖
❖
virtual HRESULT STDMETHODCALLTYPE Cancel(
❖
/* [in] */ DWORD dwTransactionID) = 0;
❖
❖
};
OPC与COM间关系
❖ OPC(OLE for process control)是建立在微软 公司OLE/COM技术基础上。
❖ COM技术的出现为简单地实现控制设备和控制管 理系统之间的数据交换提供了技术基础。但如果 不提供一个工业标准化的COM接口,各个控制设 备厂家开发的COM组件之间的相互连接仍然是不 可能的。
❖ // 像上面一样创建COM对象,然后, ❖ if ( SUCCEEDED ( hr ) ) ❖{ ❖ //通知COM对象不再使用它 ❖ m_IOPCServer ->Release(); ❖} ❖ 应用程序对COM库进行初始化之后,可以调用COM库提供的各种服务,
在调用过程中必然要消耗COM库管理的资源。因此,COM程序在完成 COM库服务之后,通常在程序退出之前,终止COM库服务函数,以便 释放COM库所维护的资源。COM库的终止函数为: ❖ void CoUninitialize(void); ❖ 凡是调用CoInitialize函数返回S_OK的进程或者程序模块,都一定要调 用对应的CoUninitialize函数以保证COM库资源的有效利用。
接口的定义、结构与分类
❖ COM对于接口的定义和接口的实现作了严格的区分。通过 下面的IUnknown接口可以知道,在接口中只有接口方法的 描述,而没有实现。
❖ COM接口的名字以字母I打头。其中IUnknown接口最重要, 因为所有其它接口都是从IUnknown接口直接或间接继承而 来的。
C++通过COM接口操作PPT

C++通过COM接⼝操作PPT⼀、背景说明在VS环境下,开发C++代码操作PPT,⽀持对PPT模板的修改。
包括修改⽂本标签、图表、表格。
满⾜⼤多数软件⽣成PPT 报告的要求,先⼿⼯创建好PPT模板,在程序中修改模板数据。
⼆、开发环境构建通过VS2012的Class Wizard创建PowerPoint和Excel的COM接⼝;由于需要操作PPT中的图表,⽽图表的数据使⽤Excel存储的,需要修改图表的数据就得⽣成Excel的COM接⼝。
1.1 进⼊类向导1.2 添加PowerPoint COM接⼝1.3 添加Excel COM接⼝选中所有的COM接⼝,⽣成接⼝⽂件。
三、定义PPT⽂件基础操作函数(头⽂件略)3.1 定义PPT应⽤基础对象class CPPTObject{public:CApplication m_PPTApp;CSlides m_Slides;CSlide m_curSlide;CPresentation m_Presentaion;};3.2 启动PowerPoint软件,调⽤COM接⼝需要安装Office// 创建PPT应⽤,启动powerpoint程序。
bool CPPTUtil::CreatePPTApplication(){COleException exception;LPCSTR str = "Powerpoint.Application";if(!m_pPPTObject->m_PPTApp.CreateDispatch(str, &exception)){AfxMessageBox(exception.m_sc, MB_SETFOREGROUND);return false;}m_pPPTObject->m_PPTApp.put_Visible(true);return true;}3.3 打开PPT模板⽂件。
修改PPT内容前,先打开PPT。
COM组件技术介绍

软件发展趋势
❖ 组件软件、软件组件
– 中间件市场已经形成
❖ 软件基础设施的重要性
– 经验和成果的重用
❖ 软件的可重用性要求
– 重用粒度不同
❖ API的多样化 ❖ 软件方案(solution),consulting市场
组件软件
❖ 部分升级
– 补丁 – 缩短软件的更新周期
❖ 增加了异构软件的可能
– 标准接口、标准规范、标准协议
❖ 变种:
– B/S
概念:软件层次思想
❖ 垂直层次
❖ 层次之间采用“接口与实现”分离的原则
❖ 理解层次的思想有助于理解整个系统或者整个 应用
– 对于计算机而言,层次是逻辑的,它是计算机软件 领域中的发展空间
– 层次使得软件更加有序、有组织、有条理 – 层次的代价:效率、体积庞大
概念:其他
❖ 现代软件的发展形成了很多重要的概念
– 身份确定 – 封装 – 可重用
IUnknown
Interface1 Interface2
Object
COM:组件
❖ COM对象的载体
– 包含多个COM对象
❖ 进程内组件
– DLL
❖ 进程外组件
– EXE
COM:进程内组件
❖ Inproc server
– Export Entrys
客户
组件
COM:进程外组件
❖ MTS和COM+
COM:COM体系
❖ 基本的功能 ❖ 扩展功能
– 连接点 – 结构化存储 – 名字服务 – 自动化 – 其他
❖ COM+
COM:COM+
❖ 建立在COM的基础上,COM的自然 延伸
高级软件工程06COM基础:接口与实现.ppt

if (iid == IID_IUnknown) {
*ppv = static_cast<IX *>(this);
}
else if (iid == IID_IX) {
*ppv = static_cast<IX *>(this);
}
else if (iid == IID_IY) {
*ppv = static_cast<IY *>(this);
CLSID_Component1, NULL, CLSCTX_INPROC_SERVER, IID_IDX, (void **) &pIX); if (SUCCEEDED(hr)) { pIX -> FX(); pIX -> Release(); }
34
•类厂
COM基础
CoCreateInstance实际上 未直接创建COM构件 创建了一个被称为类厂的构件
不同版本接口的命名:在老名称后加一个数字
22
3 COM实现
COM基础
(1)预备知识:
DLL DLL是一个构件服务器 EXE也可以是构件服务器 使用户在应用程序的运行过程中替换构件 构件是DLL中实现的接口集 DLL共享它们所链入的应用程序地址空间
HRESULT 向用户报告构件运行结果状况
“Here is the RESULT” WINERROR.H中进行定义 用户可以定义自己的代码
16
(2)引用计数
AddRef与Release 控制构件的生命期 解决内存管理问题 使构件能够自己将自己删除
使用规则 返回接口指针之前调用 AddRef; 使用完接口之后调用Release; 赋值之后调用AddRef;
COM基础
COM组件原理(一)课件PPT模板

1-12简化queryinteface函数的实 现简化queryinteface函数的实现
第1章dll中的 com组件原理
01
1-13错误处理错 误处理
02
114classmoniker classmoniker
03
115itemmoniker itemmoniker
com组件原理(一)
演讲人
202x-11-11
01
part one
第1章dll中的com组件原理
第1章dll中的com组件原理
1-3idl和iunknow接口 idl和iunknow接口
1-2接口分离技术的来 源接口分离技术的来源
1-1c++虚拟函数和纯虚 类c++虚拟函数和纯虚类
1-4iunknown接口和资 源管理iunknown接口和 资源管理
1-5假com组件假com 组件
1-6进程内的com组件激 活原理进程内的com组件 激活原理
第1章dll中的com组件原理
1-7iclassfactory接口 iclassfactory接口
1-9dll的资源管理dll的资源管 理
1-11idl中的数据类型idl中的数据 类型
1-8dllcanunloadnowdllcanunloadnow
04
1-16itemmoniker和 compositionmonite mmoniker和 compositionmonik er
05
1-17如何让一个容器类 支持cogetobject函数 如何让一个容器类支持 c1-18moniker的 联合使用以及支持 moniker的联合 使用以及支持
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Introduction to Programming ArcObjects with VBA
6-2
Introducing COM
COM is a standard for creating classes Classes can be reused between applications
Independent of programming language
接口Interfaces 多态Polymorphism 接口查询QueryInterface
测试一个对象的引用Testing an object reference
Is it nothing? What type of object is it?
Copyright © 2001, 2002 ESRI. All rights reserved.
基于COM接口 编程基础(I)
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA
Lesson overview
COM: 组件对象模型Component Object Model 使用COM类Working with COM classes
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA
6-8
Using methods and properties
Dim the variable pointing to an interface
Instantiate the object (Set)
Call methods, set properties
'Create a new RaceCar with IDrive
Dim pCar As IDrive Set pCar = New RaceCar
IDrive
pCar.Accelerate
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA
6-3
COM classes have interfaces
对象拥有一个或多个接口 接口是定义了一组方法和属性的逻辑关系 与对象的通信是通过接口来进行的
6-7
ArcObjects 多态
许多ArcGIS的类都表现出多态的特性 General interfaces for all subtypes
ILayer: All layer types (raster, tin, feature, etc.) IGxFile: All ArcCatalog file types (shapefile, map, table, etc.) IActiveView: Map (data view) and PageLayout (layout view) Several others …
All ArcObjects are COM classes Technologies based on COM
Object Linking and Embedding (OLE) OLE DB ActiveX is any technology built on COM DCOM and COM+
6-6
多态
许多不同的类可以支持相同的接口
拥有相同的所有的方法和属性 可以有不同的执行方式和拥有不同的属性值
IDrive
燃料 加速 刹车
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA
Dim pGarbage As IDrive Set pGarbage = New GarbageTruck IDrive
pGarbage.Fuel = "Full" pGarbage.Accelerate
IGal Accelerate Brake
Dump PickUp
6-4
Working with ArcObjects COM classes
Instantiate COM classes with an interface
Dim <variable> As <some interface>
Interfaces group properties and methods
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA
6-5
More on interfaces …
一个组合音响的例子
一个对象可以播放收音机、磁带、CD 必须使用适当的接口 如果选择了播放磁带的接口,则不能收听收音机
pCar.Fuel = "Full"
IDrive IGarbage
垃圾车 燃料 加速 刹车
倾倒 拾起
IDrive IRace
RaceCar Fuel Accelerate Brake
圈速度 停靠站
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA
Dim pBBox As ITape Set pBBox = New BoomBox pBBox.FM = True
IRadio ITape ICD
Copyright © 2001, 2002 ESRI. All rights reserved.
Introduction to Programming ArcObjects with VBA