如何将共享_ptr用于com接口指针
How to use shared_ptr for COM interface pointers
我一直在阅读有关与新的C 标准智能指针 unique_ptr,shared_ptr 和 feek_ptr 的各种用法建议以及一般''当我编写自己的代码并宣布并消耗它们时,他们是什么。
但是,我阅读的所有讨论似乎都限于这种简单的用法情况,在这些情况下,程序员在他/她自己的代码中使用SMART,而在必须与期望原始指针或其他库的图书馆合作时,没有真正的讨论"智能指针"的类型,例如com接口指针。
特别是,我尝试通过使用Direct2D&DirectWrite渲染文本到显示每秒帧的显示。
我对Direct2D的第一个任务是创建一个Direct2D Factory对象,并在MSDN上的Direct2D示例中使用以下代码:
ID2D1Factory* pD2DFactory = nullptr;
HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);
pd2dfactory 显然是一个"输出"参数,在这里我变得不确定如何在这种情况下使用智能指针,如果确实可以。我没有经验的C 思维告诉我,我有两个问题:
- 使用 pd2dfactory 作为com接口指针类型,smart_ptr如何与com对象实例的add()/reparter()/reparter()/reparte()成员函数一起使用?
- 在功能使用" OUT"指针参数技术的情况下,智能指针能够传递给函数吗?
我确实尝试了在 comip.h 标题文件中使用 _com_ptr_t 的替代方法,以帮助指针终身管理并声明 pd2dfactory 用以下代码指针:
_com_ptr_t<_com_IIID<pD2DFactory, &__uuidof(pD2DFactory)>> pD2DFactory = nullptr;
似乎工作到目前为止工作,但是,如您所见,语法很麻烦:)
所以,我想知道这里是否有任何C 大师可以确认智能指针在此类情况下是否能够提供帮助,或者指出我需要在需要使用时对智能指针使用的更深入的讨论其他对它们一无所知的代码库。还是只是我试图将错误的工具用于工作的情况?:)
您需要使用typedef来避免重复此易于错误的声明。这是如此普遍,以至于Comdef.h有一个宏:
_COM_SMARTPTR_TYPEDEF(ID2D1Factory, __uuid(ID2D1Factory));
现在您可以使用:
ID2D1FactoryPtr pD2DFactory;
// etc..
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 用于访问容器<T>数据成员的正确 API
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++中的cin.ignore()函数不适用于整个流
- 没有用于初始化C++中的变量模板的匹配构造函数
- 用于C++中带有数组和指针的循环
- 为什么它不适用于Visual 2019的原因
- 使用在用于SFINAE的void_t中具有参数的方法
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 重载==不适用于二进制树
- ATL COM - EnumWindows 回调函数不适用于 IDispatch::Invoke
- 如何在Windows中注册COM(组件对象模型)?(用于图标覆盖处理程序)
- 如何将共享_ptr用于com接口指针
- 在没有提供IDL(用于TLB)的情况下,从COM+dll获取IDL
- ATL/COM:MIDL 编译器不输出 UUID 用于 dispinterface
- 用于基于COM的库的带有WinRT组件的未解析外部符号LNK2019
- 适用于 Atmel 微芯片 CDC 的标准 COM 端口命令