【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)