跳至內容

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

使用

[編輯]