Windows Programming/COM Programming
外观
- 使用CoCreateInstance来创建一个COM类并返回这个类的一个指定接口。这个API函数内部,首先通过CoGetClassObject创建这个COM库的工厂类并返回IFactory接口,然后调用接口的成员方法CreateInstance来创建指定的COM类并返回指定的接口。CoGetClassObject的实现首先加载指定的COM DLL,然后调用DLL的输出函数DllGetClassObject,该函数创建工厂类并返回IFactory接口。显然,受制于DllGetClassObject只负责提供工厂类。
使用COM的标准方式
[编辑] IGraphBuilder *pGraph;
IMediaControl *pMediaControl;
IMediaEvent *pEvent;
// Create the filter graph manager and query for interfaces.
CoCreateInstance(CLSID_FilterGraph, //要创建的COM对象的类标识符(CLSID)
NULL, //如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。
CLSCTX_INPROC_SERVER,//组件类别
IID_IGraphBuilder, //创建的Com对象的接口标识符
(void **)&pGraph);//用来接收指向Com对象接口地址的指针变量
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
// Build the graph. IMPORTANT: Change string to a file on your system.
pGraph->RenderFile(L"C://Example.avi", NULL);
// Run the graph.
pMediaControl->Run();
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
// Clean up.
pMediaControl->Release();
pEvent->Release();
pGraph->Release();