x.闷

【DirectShow】CoCreatInstance()函数

CoCreatInstance()函数用来创建一个Com组件对象。

  函数原形:

  STDAPI CoCreateInstance(

  REFCLSID rclsid, //创建的Com对象的类标识符(CLSID)

  LPUNKNOWN pUnkOuter, //指向接口IUnknown的指针

  DWORD dwClsContext, //运行可执行代码的上下文

  REFIID riid, //创建的Com对象的接口标识符

  LPVOID * ppv //用来接收指向Com对象接口地址的指针变量

  );

     参数:

  rclsid 

  [in] 用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。

  pUnkOuter 

  [in] 如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。

  dwClsContext 

  [in] 组件类别. 可使用CLSCTX枚举器中预定义的值.

  riid 

  [in] 引用接口标识符,用来与对象通信。

  ppv 

  [out] 用来接收指向接口地址的指针变量。如果函数调用成功,*ppv包括请求的接口指针。

      --(以上自百度百科)。

    例如,要创建一个DirectDraw COM对象,并得到其IDirectDraw7接口指针,可以这样:

   首先,创建COM组件必须初始化COM,使用CoInitialize()函数,如果COM还没有被装载的话,使用该函数将装载COM库:

CoInitialize(NULL); //初始化COM库,如果库未被装载,则装载它

CoCreatInstance(&CLSID_DirectDraw       //该COM对象所属COM类的GUID:CLSID_DirectDraw

                            NULL,

                           CLSCTX_ALL,

                           &IID_IDirectDraw7,          //我们欲得到的接口的IID

                           &lpdd7 )                         //我们欲得到的接口的接口指针

【2009.12.17】DWORD dwClsContext参数

                        可以使用CLSCTX中定义的值,CLSCTX是一个结构体

           typedef enum tagCLSCTX 

    CLSCTX_INPROC_SERVER   = 1,        //进程内对象
    CLSCTX_INPROC_HANDLER = 2, 
    CLSCTX_LOCAL_SERVER    = 4 
    CLSCTX_REMOTE_SERVER   = 16
} CLSCTX; 
#define CLSCTX_SERVER    (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
#define CLSCTX_ALL       (CLSCTX_INPROC_HANDLER | CLSCTX_SERVER)

posted on 2010-04-29 15:13  x.闷  阅读(527)  评论(0编辑  收藏  举报