DirectShow函数

CoCreateInstance

创建组件的最简单的方法是使用CoCreateInstance函数。
在COM库中包含一个用于创建组件的名为CoCreateInstance的函数。此函数需要一个CLSID参数,在此基础上创建相应组件的一个实例,并返回此组件的某个接口。
CoCreateInstance 的声明HRESULT _stdcall  CoCreateInstance(REFCLSID rclsid,
                        LPUNKNOWN pUnkOuter,
                        DWORD dwClsContext,
                        REFIID riid,
                        LPVOID * ppv);
 
第一个参数:待创建组件的CLSID。
第二个参数:用于聚合组件。
第三个参数:dwClsContext的作用是限定所创建的组件的执行上下文。
第四个参数:iid为组件上待使用的接口的iid。
CoCreateInstance 将在最后一个参数中返回此接口的指针。通过将一个IID传给CoCreateInstance,客户将无需在创建组件之后去调用 其QueryInterface函数。
CoCreateInstance的实现
HRESULT CoCreateInstance(const CLSID& clsid,               
IUnknown* punkonwnDuter,               
DWORD dwClsContext,               
const IID& iid,               
void** ppv){   
// Set the out paameter to NULL   
*ppv = NULL;   
// Create the class factory    
// and get an IClassFactroy interface pointer.   
IClassFactory* pIFactory = NULL;   
HRESULT hr = CoGetClassObject(clsid,                       
dwClsContext,                       
NULL,                       
IID_IClassFactory,                       
(void**)&pIFactory);  
if (SUCCEEDED(hr))    {       
// create the component.       
hr = pIFactory->CreateInstance(punkonwnDuter, iid, ppv);       
pIFactory->Release()();   
}   
return hr;
}
CoCreateInstance的使用
// Create component.
IX *pIX = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_Companent1,
                  NULL,
                  CLSCTX_INPROC_SERVER,
                  IID_IX,
                  (void **)&pIX);
if (SUCCEEDED(hr))
{
    pIX->Fx();
    pIX->Release();
}
CLSCTX_INPROC_SERVER值告诉CoCreateInstance只装载包含进程中服务器或DLL中的组件。

你可能感兴趣的:(DirectShow函数)