posts - 34,comments - 2,trackbacks - 0

1、         组件:组件是将应用程序分割成多个独立部分,维护时用新组件替代旧组件。而传统的应用程序是将程序分割成文件、模块和类,将他们编译并链接成一大块。

组件特点:

   、可修改,可替换,满足用户的需求

   、有组件库可以快速组装,AcitveX控件

   、分布式:事务逻辑和系统服务相分离,简化了系统开发的复杂性,

   、组件需要动态连接,,不可能在运行时编译。

   、要封装,不要改变其接口、

   、以二进制的形式发布,已编译好的。

2、         接口:提供两个不同对象间的一种连接,计算机是通过一组函数连接起来的,其实这组函数实质上就是定义了程序中不同部分的接口。对于COM接口是包含一个函数指针数组的内存结构。

用纯虚函数作为接口。看下面经典例子:

#define InSruct struct

InSruct          IA           //定义接口

{

       virtual void Fun1()=0;

};

 

class CA:public IA     //定义组件(注意类可以继承结构体,结构体也能继承结构体)

{

       void Fun1()

       {

              cout<<"class Fun1()";

       }

};

Void main()                    

{

       CA *pCa=new CA;

       IA *pIa=pCa;

       pIa->Fun1();   //表示接口:在程序内部实现。

       delete pCa;

}

 

//特别注意的是:类不是组件,组件不一定要类实现,也不不一定需要继承、

 

  

 

 

 

 

 

3、         组件的内存(探讨COM接口为什么可以用纯抽象基类实现COM组件)

抽象基类提供vtbl指针指向虚拟函数、每个对象共享同一个vtbl指针,但数据各自不同

//////////////////////////////////////////////////////////////////////////////////////////////

4、         客户通过不断询问清晰组件干什么,但没有完成知道组件内部怎么样。

客户如何向组件询问关于它所支持的接口?组件如何回答、以及这种请求应答方式的结果、

 

 

 

   HRESULT QueryInterface( REFIID iid, void** ppvObject);函数查询某个组件是否支持某个特定的接口

//iid 是要查询的接口ID, ppvObject是返回的接口的指针,

   关于类型转换:

static_cast

 用法:static_cast < type-id > ( expression )

  该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:

  用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。

  进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;

  进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。

  用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。

  把空指针转换成目标类型的空指针。

  把任何类型的表达式转换成void类型。

  注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。

posted on 2011-09-21 19:54 Yu_ 阅读(1046) 评论(0)  编辑 收藏 引用 所属分类: Windows程序设计

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理