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();