[如何简单的理解com组件]

  很多的初学者会对com组件设计感到很迷茫,其实可以把理解简单化些。当然,你深入的理解它的设计原理和调用机制,还是有些复杂的。
 但这些都有人做了,一般来说,我们不必过度关注。
  先来看看,我们一般是怎么设计程序的。
  首先定义一个接口(在自己的exe程序中都不怎么定义接口了,一来就一个类,呵呵,除非模块化,而这个模块以后可能会有变化):

 

// 这个接口有一个唯一标识的号码:518(我要发财)
class  IDownloadObject
{
public:
 
bool StartNetwork(unsigned short usPort) = 0;
 
bool Download(string & strUrl) = 0;
}
;

 

然后派生我们的下载类(.h):

#include  " IDownloadObject "
class  CFileDownload :  public  IDownloadObject
{
public:
 
bool StartNetwork(unsigned short usPort);
 
bool Download(string & strUrl); 
}
;
(.pp)
bool  CFileDownload::StartNetwork(unsigned  short  usPort)
{
 实现.....
}

bool  CFileDownload:Download( string   &  strUrl)
{
 实现.....
}

 

ok了,我们再加一个类专门new各类的对象

class  CCreateObjct
{
public:
 
//创建一个类的对象
 static bool CreateInstance(int iNO,void** pp)
 
{
  
switch(iNO)
  
{
  
case 528:
   
*= new CFileDownload();
   
break;
  
case 529:
   
*= 其他的类
   
break;
  defualt:
   
break;
   
  }

  
return (*p !
= NULL);
 }

}

好啦,我们的类设计完了,我们要开始构造调用了

#include  " FileDownload.h "
#include 
" MgrPtr "
int  main( int  argc,  char   * a[])
{
 IDownload 
* pIDn = NULL;  //定义接口指针
 CCtreaeObject::CreateInstance(518,&pIDn);
 
if(pIDn)
 
{//ok,得到一个接口指针了,就是CFileDownload的指针,向上转换了
  if(pIDn->Network(8888))
  
{
   
string strUrl = "bt://xxxx/xxxx";
   pIDn
->Download(strUrl);
  }

 }

 
return 0;
}

 

====
完了,呵呵.
那对应到客户端程序和com组件中来,我们写的这些类应该各在什么位置呢?

这个是我们客户端程序的代码:

 

--------------------------------------
#include 
" FileDownload.h "     // 这里相当于导入com的接口描述
#include  " MgrPtr "             // 这里相当于加载com库(CoInitialize),让我们可以方便的调用和管理com组件
int  main( int  argc,  char   * a[])
{
 IDownload 
* pIDn = NULL;  //定义接口指针
 CCtreaeObject::CreateInstance(518,&pIDn);
 
if(pIDn)
 
{//ok,得到一个接口指针了,就是CFileDownload的指针,向上转换了
  if(pIDn->Network(8888))
  
{
   
string strUrl = "bt://xxxx/xxxx";
   pIDn
->Download(strUrl);
  }

 }

 
return 0;
}

---------------------------------------------


这个相对于com库的api:CoCreateInstance
只是它实现了更复杂的东东,比如查询注册表,加载com组件,得到类厂接口....

--------------------------------------------
class  CCreateObjct
{
public:
 
//创建一个类的对象
 static bool CreateInstance(int iNO,void** pp)
 
{
  
switch(iNO)
  
{
  
case 528:
   
*= new CFileDownload();
   
break;
  
case 529:
   
*= 其他的类
   
break;
  defualt:
   
break;
   
  }

  
return (*== NULL);
 }

}

-------------------------------------------

 

这就是我们写的com组件了

-----------------------------------------------------
// 这个类有一个唯一标识这个接口的号码:518
class  IDownloadObject
{
public:
 
bool StartNetwork(unsigned short usPort) = 0;
 
bool Download(string & strUrl) = 0;
}
;

然后派生我们的下载类(.h):
#include 
" IDownloadObject "
class  CFileDownload :  public  IDownloadObject
{
public:
 
bool StartNetwork(unsigned short usPort);
 
bool Download(string & strUrl); 
}
;
(.pp)
bool  CFileDownload::StartNetwork(unsigned  short  usPort)
{
 实现.....
}

bool  CFileDownload:Download( string   &  strUrl)
{
 实现.....
}

------------------------------------------------------

 

这样理解是不是简单些?

以上代码是信手写来,没调试运行过.....也不知道写这些东东对一些人有没有用
反正大家就把com组件当成完成某个功能的类的集合,我们要调用什么类的功能时,就new里面的一个类对象,
然后得到这个类对象的指针(经过向基类转换过的),然后高用函数,与我们平时调用自己的类没有什么多大的区别.

走了...嗯?谁扔的臭鸡蛋?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据生态系统是由多个组件构成的,这些组件相互之间通过数据的传输和处理进行连接,共同实现大数据的处理和分析。其中,hadoop生态系统是大数据生态系统中的一个重要组成部分。 hadoop生态系统的鱼骨图主要可以分为以下几个组件: 1. HDFS(Hadoop分布式文件系统):HDFS是hadoop生态系统中的分布式文件系统,它能够将大规模数据存储在集群的各个机器上,并提供高可靠性和高吞吐量的数据访问。 2. MapReduce:MapReduce是hadoop生态系统中的一种编程模型,用于处理大规模数据的并行计算。通过将任务分解为多个子任务,并在分布式环境中进行计算和结果的合并,MapReduce能够高效地处理大数据。 3. YARN(Yet Another Resource Negotiator):YARN是hadoop生态系统中的资源管理和作业调度框架,它负责分配集群中的计算资源,并协调各个作业的执行。YARN的出现使得hadoop生态系统能够同时运行多个并发作业,提高了系统的利用率和效率。 4. HBase:HBase是hadoop生态系统中的分布式非关系型数据库,它基于HDFS构建,具有高可靠性、高可扩展性和高性能的特点。HBase能够存储海量的结构化和半结构化数据,并支持快速的随机读写操作。 5. Hive:Hive是hadoop生态系统中的数据仓库工具,它提供了类似于SQL的查询语言,使得用户可以通过简单的SQL语句来查询和分析存储在hadoop集群中的数据。Hive的优势在于它能够将复杂的查询转化为MapReduce任务,从而实现对大规模数据的高效处理。 总之,hadoop生态系统的鱼骨图展示了其不同组件之间的关系和作用。通过理解和分析这些组件,可以更好地掌握和应用hadoop生态系统,实现对大数据的有效处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值