COM技术及其在互联网络上的应用

[概述] 本文从基本的概念入手,在COM的接口,类型库,GUID,等方面清楚的展示了COM。同时本文还介绍了COM对象的创建,什么是MTS,如何利用MTS管理COM对象,他的优点和编程实现,并结合了具体的实例,本文的另一重点是介绍COM在互联网上的应用,通过安全性,效率等比较说明,展示了COM在互联网上的强大的应用前景。在论述的过程中,本文结合了C++,VB和ASP来说明。

      [SUMMARIZE] In this article,the  author  introduce the technology of COM.From the interface,the type library  and GUID Clearly show the character of COM.This article also list how to create COM object,how to Using MTS to manage the COM object,And how to make MTS in program.AS another emphasis,The article demonstrate the application of COM in internet,through the analysis of security and efficiency,show the power of COM.

关键字:COM,MTS,组件技术

前言
在互联网发展到了今天,网络环境下的编程标准有很多,COM是其中之一,也是发展最快,应用面最广的标准。但目前在国内,没有多少真正介绍COM的书,加上COM本身理解起来也有难度,推广和使用COM比较困难,本文试图从概念和应用结合的角度,把COM展示给读者。并介绍了COM在Internet上的应用。
一。Com技术概论
  COM(Component Object Model)微软的组件对象模型.它的实质是一些小的二进制可执行的程序,它可以为应用程序和操作系统以及其他的组件提供服务.微软的许多其他的技术如:ActiveX,DirectX,OLE等都是基于COM建立的.
  COM的发布形式是:以win32动态链接库(DLL)或者以可执行文件(EXE)的形式发布的可执行代码组成。 其中以DLL形式发布的方式实现的组件程序,在客户调用时会把组件程序和客户程序运行在同一个进程中,所以被称为进程内的组件。以EXE的形式发布,在客户调用时,他有自己的独立的进程空间。故称为进程外的组件。
   COM也不是win API那样的一个函数集:它并没有支持或者提供各种函数来对系统进行特定的操作。COM本身要实现一个称为COM库(COM library)的API,它提供诸如客户对组件的查询,以及组件的注册/反注册等一系列服务,一般来说,COM库由操作系统加以实现,程序员不必关心其实现的细节。
 总体来看,COM提供了编写组件的一个标准方法。遵循COM标准的组件可以被组合起来以形成应用程序。至于这些组件是谁编写的,是如何实现的并不重要。组件和客户之间通过"接口"来发生联系。
1.COM接口是一组逻辑上相互关联的操作,这些操作定义了某种行为,也就是这组操作的规范,而非特定的实现,实质也就是接口代表了接口调用者和实现者之间的一种约定.接口的理解是非常重要的,因为所有的对COM的操作都是通过接口指针来进行的.通过接口我们把组件的功能展示给了调用者(ASP Pages等)
    每个COM接口都提供一个名叫IunKnow接口,该接口包括了ADDREF(),RELEASE(),和QUERYINTERFACE()三个接口,前两个接口是用来操纵对象引用计数,因为每个COM对象的创建都需要消耗系统的资源,引入了这两个函数后,当对象被创建或其他用户将一个指针指向该对象时,调用ADDREF()方法,将引用计数加一,当不再使用该对象时,调用RELEASE()方法,将引用计数减一,当计数为0时,对象释放自己,就可以避免每次引用对象时都重新创建,使资源可以合理的分配使用。QUERYINTERFACE()接口是用来查寻该对象是否用来支持其他的接口的,您需要传递欲查寻的接口的IID以及一个指向输出参数的指针。每个COM接口都是从IunKnow接口派生出来的,在其VTBL中的开始的三个条目就是指向上述三个函数的指针。下面写出这三个接口的实现方法:
/* 引用对象*/
ULONG IUnKnown::AddRef(void)
{
  m_RefCount++;    /*引用计数加一*/
  return m_RefCount;   /* 返回当前的被引用次数的总数 */
}

/*释放对象的*/
ULONG Iunknow::Release(void)
{
  m_RefCount--;   /* 引用次数减一 */
  if (m_RefCount==0)  /* 如果计数值为0,对象释放自己 */
{
 delete this;
 return 0;
}
return m_RefCount;   /* 返回当前的被引用次数的总数 */}

/*查询接口*/
HRESULT IunKnow::QueryInterface(REFIID riid,  LPVOID  FAR *ppv)
{
  if(riid==IID_IUnknown || riid==IID_IDropTarget)   /*检查是否对象支持所查询的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值