COM
文章平均质量分 76
hongjiqin
这个作者很懒,什么都没留下…
展开
-
COM一些小知识
参考来源:http://www.host01.com/article/software/VisualC/2006091718392288.htm1 COM组件是一个C++类,他从一系列接口派生而来,并实现了所有的接口。这些接口都是纯虚类。2 COM组件有三个最基本的接口类,分别是IUnknown、IClassFactory、IDispatch。 COM规范规定任何组件、任原创 2009-07-21 15:32:00 · 1295 阅读 · 1 评论 -
通过ATL开发COM_1概述
ATL 是为了减轻程序员开发COM的负担而提供的一套模板库ATL提供的支持:1. CComModule封装对组件的宿主支持,掩盖了(DLL和EXE)之间的差别。2. 对IUnknown的支持3. 对类工厂的支持4. 自动化 : IDispatchImplCOM 数据类型 : CComBSTR, CComVariant接口指针 : CComPtr, CComQIPtr原创 2009-08-18 18:26:00 · 1749 阅读 · 0 评论 -
通过ATL开发COM_3实现类厂和组件的创建
类工厂的实现,组件的创建过程1. 在*_Server.cpp 中有BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_Math, CMath)END_OBJECT_MAP() 展开后是这样:struct _ATL_OBJMAP_ENTRY30{ const CLSID* pclsid; HR原创 2009-08-18 18:31:00 · 3791 阅读 · 1 评论 -
COM学习笔记3_IUnknown的三个接口函数
对于COM组件,正确处理IUnknown的三个接口函数非常重要。对于QueryInterface,一个参考处理如下:HRESULT __stdcall CA::QueryInterface(const IID& iid, void** ppv){ if (iid == IID_IUnknown) { *ppv = static_cast(this) ; }原创 2009-08-11 13:43:00 · 2544 阅读 · 0 评论 -
COM学习笔记1_COM初步探索
COM组件的两个重要需求:1。 动态链接2。 隐藏实现细节COM初步探索一个典型C++客户和组件的例子// 组件模块interface IX{ virtual void __stdcall Fx1() = 0 ; virtual void __stdcall Fx2() = 0 ;} ;interface IY{ virtual void原创 2009-08-11 13:29:00 · 1311 阅读 · 0 评论 -
COM学习笔记8_IDispatch (调度接口) 自动化
一般的通讯方式:客户 COM(vbtl)接口 COM组件自动化通讯方式:客户(自动化控制器) IDispatch::Invoke 调度接口(或vbtl接口) 实现IDispatch接口的COM组件 (自动化服务器)自动化服务器 : COM组件自动化控制器 :COM客户相关知识:IDispatch, 调度接口,双重接口,类型库,IDL, VARIANT,原创 2009-08-11 14:01:00 · 11149 阅读 · 0 评论 -
COM学习笔记7_跨进程COM组件
由于内存不能跨进程访问,所以访问exe中的COM组件需要额外处理1.跨进程调用函数 : 可以通过LPC (本地过程调用) 实现2.参数传递 : 通过"调整",若在同一机器上,需要拷贝参数,若在远端,还需要考虑机器数据表示方面的不同。调整 :将函数调用的参数从一个进程地址空间传到另一个进程地址空间参数的调整可以通过IMarshal接口实现LPC通过代理/残根调整参数原创 2009-08-11 14:00:00 · 3735 阅读 · 0 评论 -
COM学习笔记2_COM接口vbtl内存布局
这里要注意的是,虽然图中显示IY的虚函数表中QueryInterface,AddRef和Release指向的函数地址与IX的虚函数表中对应函数相同,都直接指向CA::QueryInterface等。但其实并不完全是这样。如果看汇编实现,可以看到IY中的AddRef指向的地址是这样:[thunk]:CA::AddRef`adjustor{4}:0040174原创 2009-08-11 13:38:00 · 1835 阅读 · 1 评论 -
COM学习笔记6_COM的复用:包容和聚合
继承可分实现继承和接口继承接口继承 :一个类只能继承另一个接口。一个接口是里面只有纯虚函数,没有数据和函数实现实现继承 :一个类继承另一个类,包括基类中的各种数据和实现COM不支持实现继承,因为实现继承会造成较大耦合,违背了COM的思想。COM实现复用可采用包容和聚合--------------------------------------------------原创 2009-08-11 13:59:00 · 1546 阅读 · 1 评论 -
COM学习笔记4_创建COM组件的实现
为了实现COM的动态链接,必须把组件的实现和客户代码分隔开。一种处理是把组件放入DLL中。这样为了支持客户创建组建,组件需要导出一个类似CreateInstance的函数。extern "C" IUnknown* CreateInstance(){ IUnknown* pI = static_cast(new CA) ; pI->AddRef() ; return pI原创 2009-08-11 13:48:00 · 2479 阅读 · 1 评论 -
通过ATL开发COM_2实现IUnknown接口
每个COM组件需要实现这三个功能1. 实现IUnknown接口 (通过 CComObjectRootEx 实现)2. 实现一个类工厂,支持组件的创建 (通过 CComCoClass 实现)3. 实现自注册 ATL是如何实现IUnknown接口的? 组件通过派生CComObjectRootEx 获得 IUnknown支持template class CComObj原创 2009-08-18 18:28:00 · 2457 阅读 · 0 评论