使用COM对象/ CComPtr和STL时的建议

And*_*rew 5 c++ com stl atl visual-c++

我正在使用directshow做一些COM相关的事情,例如:

typedef CComPtr<IBaseFilter> AutoIBaseFilterPtr;
map<CString, AutoIBaseFilterPtr> _filterMap;
Run Code Online (Sandbox Code Playgroud)

存储directShow相关com对象及其友好名称的列表.

在找到这篇文章(参见:问题2)后,关于VC10编译器中的更改如何影响以前的OK代码,我想知道在混合STL和CComPtr时是否还有其他需要注意的事项,或者只是将STL和COM混合在一起一般.

任何提示将不胜感激,谢谢

Kim*_*man 2

我能想到的唯一没有提到的小事情是 as是CAdapt必需的,因为它也会重载。CComBSTRCComPtroperator&

事实上,重载是必要operator&CAdapt,因为许多 STL 容器要求获取 X 的地址返回指向该 X 的指针。

  • 对于 VC2010 RTM 中的所有 STL 容器和大多数 STL 算法,“CComPtr”和“CComBSTR”不再需要“CAdapt”。这是因为它现在使用 `std::addressof` (C++0x 中的新事物)而不是直接应用 `operator&amp;` 来获取对象的地址,并且该辅助函数围绕任何重载的 `operator&amp;` 工作,并且始终提供实际的指针。 (3认同)