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

C++ 使用COM对象/CComPtr和STL时的建议,c++,visual-c++,com,stl,atl,C++,Visual C++,Com,Stl,Atl,我正在使用directshow做一些与COM相关的事情,例如: typedef CComPtr<IBaseFilter> AutoIBaseFilterPtr; map<CString, AutoIBaseFilterPtr> _filterMap; typedef CComPtr AutoIBaseFilterPtr; 映射过滤器映射; 存储与directShow相关的com对象及其友好名称的列表 在了解了VC10编译器中的更改如何影响以前的OK代码之后,我想知道在

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

typedef CComPtr<IBaseFilter> AutoIBaseFilterPtr;
map<CString, AutoIBaseFilterPtr> _filterMap;
typedef CComPtr AutoIBaseFilterPtr;
映射过滤器映射;
存储与directShow相关的com对象及其友好名称的列表

在了解了VC10编译器中的更改如何影响以前的OK代码之后,我想知道在混合STL和CComPtr或仅混合STL和COM时是否还有其他需要注意的事情


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

我能想到的唯一没有提到的一点是,
CComBSTR
以及
CComPtr
都需要
CAdapt
,因为它也会重载
操作符&


事实上,正是重载
运算符&
使得
CAdapt
成为必要,由于许多STL容器要求获取某物X的地址返回指向所述X的指针。

感谢该文章的链接。我认为
CAdapt
是STLATL桥接的建议,甚至有一段时间是必需的?我对COM还是有点陌生,所以我并不真正了解CAdapt对STL的使用,但看看它,是的,这似乎是推荐的,但我猜有相当多的人在试图在VC10下编译他们的程序时可能会感到非常惊讶。我的问题是想找出更多我可能会落入肮脏陷阱的案例。顺便说一句,谢谢你对标签的编辑。我有幸追踪并修复了bug,却发现它们是由于缺乏CAdapt使用而导致的-编译器很高兴在构建时阻止你…标记为答案,尽管我的问题有点开放,您是唯一回复的人:)
CAdapt
对于所有STL容器和VC2010 RTM中的大多数STL算法不再需要
CComPtr
CComBSTR
。这是因为它现在使用
std::addressof
(C++0x中的一个新事物)而不是直接应用
操作符&
来获取对象的地址,并且该助手函数围绕任何重载的
操作符&
,始终提供实际的指针;谢谢你的补充信息,我还没有看过VS2010。我需要仔细阅读std::addressof--看起来很有趣!