跳转到内容

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

使用

[编辑]