COM编程基础
DirectX采用了COM标准。而DirectShow是一套完全基于COM的应用系统。要想深入学习DirectShow,掌握一些COM编程的基础知识是必不可少的。DirectShow应用程序实际上是一种COM组件的客户程序,只是COM组件的“使用”问题。这些问题包括如何创建COM组件、如何得到组件对象上的接口以及调用接口方法、如何管理组件对象(即需要熟悉COM的引用计数机制)等。下面的代码是最一般的步骤。
CoInitialize(NULL); //COM库初始化
//Do something
//...
IUnknown *pUnk = NULL;
IObject *pObject = NULL;
//创建组件对象
HRESULT hr = CoCreateInstance(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IID_IUnknown,(void**)&pUnk);
if (SUCCEEDED(hr))
{
//查询得到组件对象上的接口
hr = pUnk->QueryInterface(IID_IObject, (voidI**)&pObject);
if (SUCCEEDED(hr))
{
//调用接口的方法
pObject->SomeMethod();
pObject->Release();
}
pUnk->Release();
}
//...
CoUninitialize(); //释放COM库使用的资源
Filter本身是一种COM组件,开发Filter牵涉到了COM组件的“实现”问题。COM本身只是一种规范,而不是实现。当使用C++来实现时,COM组件就是一个C++类,而接口都是纯虚类。可以用如下的C++代码来简单描述一个COM组件。<