COM组件开发知识重点——COM原理与应用篇(二)

转载 2016年04月08日 15:31:59

第3章 COM的实现

3.1 进程内组件(DLL)的实现,可以参考DLL技术,主要参数为:

1)LoadLibrary:装载DLL模块

2)GetProcAddress:取引出函数的地址

3)FreeLibrary:释放DLL模块

    COM采用LPC(本地过程调用)和RPC(远程过程调用)的方法进行进程之间的通信,LPC用于在同一机器上的不同进程之间进行通信,而RPC用于在不同机器上的进程之间进行通信。

COM组件开发知识重点——COM原理与应用篇(二)3.2 组件程序的两个用于注册的入口函数为DllRegisterServer和DllUnregisterServer,注册组件使用命令:RegSvr32 *.dll;反注册组件使用命令:RegSvr32 /u *.dll,进程内组件注册使用此命令。进程外组件注册必须支持两个命令行参数/RegServer 和/UnregServer。
3.3 类厂

    COM库通过类厂创建COM对象,对应每一个COM类,都有一个类厂专门用于该COM类的对象创建工作。类厂本身也是一个COM对象,它支持接口IClassFactory。

COM组件开发知识重点——COM原理与应用篇(二)CreateInstance创建对应的COM对象,LockServer控制组件的生存周期。

类厂由函数DllGetClassObject创建。

COM组件开发知识重点——COM原理与应用篇(二)DllGetClassObject返回类厂对象的接口指针,再通过CreateInstance创建对应的COM对象。
3.3.2 COM库与类厂的交互

    创建对象函数:

1)若创建远程对象或希望一次获取对象的多个接口指针,选用CoCreateInstanceEx。

COM组件开发知识重点——COM原理与应用篇(二)

2)若希望获取类厂对象或要调用类厂的某些成员函数,选用CoGetClassObject,通常IID=IID_IclassFactory,进程内组件直接调用DLL的CoGetClassObject,若CoGetClassObject创建的类厂对象位于进程外组件,函数启动组件进程,然后等待,直到组件进程把它支持的COM类对象的类厂注册到COM中,返回类厂信息。

COM组件开发知识重点——COM原理与应用篇(二)

3)其他情况下,选用CoCreateInstance创建对象,CoCreateInstance封装类厂创建对象的过程,返回COM对象的接口指针,不能创建远程机器上的对象。

COM组件开发知识重点——COM原理与应用篇(二)COM组件开发知识重点——COM原理与应用篇(二)
3.4 COM库

    COM库初始化函数:CoInitialize

    COM库终止函数:CoUninitialize

3.4.2 COM库的内存管理

    COM提供的内存管理器标准,是一个COM接口IMalloc。当组件内存的分配和释放不在同一模块,需要用到内存管理器,COM库封装了三个API函数,用于内存分配和释放

CoTaskMemAlloc

CoTaskMemFree
CoTaskMemRealloc

3.4.3 组件程序的装载和卸载

1)进程内组件的装载、卸载

2)进程外组件的装载、卸载

    组件程序满足两个条件才可以被卸载:组件中对象数为0;类厂的锁计数器为0。此时,DllCanUnloadNow返回TRUE。

    在判断返回类型HRESULT时,需用宏SUCCEEDED和FAILED。


此文件来自于【http://blog.sina.com.cn/s/blog_5698c05f0100lp2e.html】

COM组件开发知识重点——COM原理与应用篇(一)

第1章 概述     COM组件可以是一个Dll(进程内组件),也可以是一个EXE(进程外组件)。进程内组件就是组件和客户程序在同一进程内,进程外组件即组件和客户程序分别有自己的进程空间。    ...

COM组件设计与应用(二)——GUID和接口

一、前言   书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数...

COM组件设计与应用(二)——GUID和接口

本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html

COM组件设计与应用(二)——GUID和接口

本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html 一、前言   书接上回,话说在 doc(Wo...

COM组件的原理及应用(附源码)

  • 2008年09月02日 21:55
  • 691KB
  • 下载

COM 组件设计与应用(十一)—— IDispatch 及双接口的调用

原文:http://www.vckbase.com/index.php/wv/1236 一、前言 前段时间,由于工作比较忙,没有能及时地写作。其间收到了很多网友的来信询...

COM 组件设计与应用(三)——数据类型

 本文摘自:http://www.vckbase.com/index.php/wv/1206 一、前言 上回书介绍了GUID、CLSID、IID和接口的概念。本回的重点是介绍 COM 中的数...

COM组件设计与应用(一)——起源及复合文件

本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8883.html 一、前言   公元一九九五年某个夜黑风高的晚上,我的...

COM 组件设计与应用——杨老师专辑

COM 组件设计与应用(十八)——属性包COM 组件设计与应用(十七)——持续性COM 组件设计与应用(十六)——连接点(vc.net)COM 组件设计与应用(十五)——连接点(VC6...
  • jiht594
  • jiht594
  • 2011年10月28日 17:36
  • 1577

COM 组件设计与应用(七)——编译、注册、调用

本文摘自:http://www.vckbase.net/index.php/wv/1218 一、前言 上两回中,咱们用 ATL 写了第一个 COM 组件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM组件开发知识重点——COM原理与应用篇(二)
举报原因:
原因补充:

(最多只允许输入30个字)