创建一个组件最简单的方法

1,创建一个组件最简单的方法:用 CoCreateInstanc函数.因此CoCreateInstanc也是创建组件用的最多的一种方法.但其灵活性有限,不能满足所有组件的需求. 这就是为什么要引入类厂.

 所有组件都是用类厂创建的.  CoCreateInstanc也是按照一般方法通过类厂来创建组件的.

2. CoCreateInstanc

com库中包含一个创建组件的名为CoCreateInstanc的函数.

定义如下:

HRESULT __stdcall CoCreateInstanc(

   const CLSID & clsid,
   IUnknown * pIUnknown,   //outer component
   DWORD  dwClsContext,    //server context
   const IID &iid,
   void ** ppv
);

看以看到有四个输入参数一个输出参数.
第一个待创建组件的CLSID.
第二个是用来聚合组件的.
第三个是用来限定所创建组件的执行上下文.
第四个是组件待使用的接口的IID;
CoCreateInstanc将在最后一个参数中返回此接口指针.
将一个IID 传给CoCreateInstanc,客户将无需在创建组件后再调用QueryInterface;


3.CoCreateInstanc的使用

  IX *pIX = NULL;
  HRESULT  hr = CoCreateInstanc(CLSID_component1,
                                NULL,
                                CLSCTX_INPROC_SERVER,
                                IID_IX,
                                (void **)&pIX);

  if(SUCCEEDED(hr))
 {
  pIX->Fx();
  pIX->Release();
  }


该例子创建了一个由CLSID_component1标志的组件.
此处不需要聚合组件,因此第二个参数之NULL;
我们用IID_IX来表示希望得到接口IIX的指针,CoCreateInstanc将把此指针返回在pIX变量中,若成功返回则可用该接口.Release()表示对接口和组件的使用已经完成.

类上下文

CoCreateInstanc的第三个参数可以控制所创建的组件是在客户创建的进程中运行,还是在不同进程中.或者在另外一台机器上.

该参数可以由一下几个值组合:

CLSCTX_INPROC_SERVER,
CLSCTX_INPROC_HANDLER,
CLSCTX_LOCAL_SERVER,
CLSCTX_REMOTE_SERVER;
客户可以在三种不同上下文中使用某个组件: 进程中,本地,远程.

Posted on 2006-12-14 21:41 艾凡赫 阅读(480) 评论(0)  编辑 收藏 引用 所属分类: COM

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