现在又开始接触COM组件啦
加油!
http://blog.youkuaiyun.com/b97/archive/2007/06/25/1666278.aspx
1) CComPtr和CComQIPtr都支持相应的内存管理
2) CComQIPtr模板类附加一个IID参数可以实现接口查询
CComPtr
1) 超出有效范围自动 Release()
2) 注意防止重复调用 Release()
CComQIPtr
1) 附加参数IID, 构造的时候直接获得接口类实例
Example:
[CComPtr]
CComPtr<IXXX> ptrXXX;
HRESULT hr = CoCreateIntance( CLSID_XXX, NULL, CLSCTX_LOCAL_SERVER, IID_XXX, (void**) ptrXXX);
...
ptrXXX->XXX
[CComQIPtr]
CComQIPtr<IXXX, &IID_XXX> ptrQIXXX<ptrXXX>;
if ( ptrQIXXX )
...
注意:
它们都是模板类, 上述例子中的ptrQIXXX是和ptrXX创建自的接口的另一个接口, 他们属于同一个组件, 所以使用的时候, 只要获得一个接口实例, 根据接口的传递性就能够直接获得另一个需要的接口, 隐式的调用了QueryInterface, 它们都提供一个Release方法, 但是使用 = 0, 也可以释放, 鉴于其超出使用范围自动调用的机制, 建议不要显式的调用, 由此带来的问题就是, 如果作为全局变量, 其析购时刻甚至晚于主进程, 所以无法使用CoUninitalize, 所以我在项目中还是使用*.