创建一个组件最简单的方法
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;
客户可以在三种不同上下文中使用某个组件: 进程中,本地,远程.