2010-04-27 28 views
5

我做一些COM相關事情的DirectShow如STL時:建議使用COM對象/但是CComPtr和

typedef CComPtr<IBaseFilter> AutoIBaseFilterPtr; 
map<CString, AutoIBaseFilterPtr> _filterMap; 

要存儲的DirectShow相關的COM對象的名單和他們的友好名稱。

在發現this article (See:Problem 2)關於如何改變VC10編譯器可能會影響以前的OK代碼,我想知道是否有更多的事情要注意混合STL和CComPtr或者可能只是混合STL和COM。

任何提示將不勝感激,謝謝

+2

感謝您的鏈接到這篇文章。 – sharptooth 2010-04-27 08:52:37

+0

我認爲'CAdapt'被推薦,甚至在STL <-> ATL橋接已經有相當長的一段時間了嗎? – 2010-04-27 09:52:17

+0

我對COM還是有點新,所以我並沒有真正意識到CAdapt和STL一起使用,但看着它,是的,它似乎是推薦的,但我猜測那裏有很多人可能有當試圖在VC10下編譯它們的程序時,這是一個令人討厭的驚喜。我的問題是爲了找到更多的案例,我可能陷入一個討厭的陷阱。感謝標籤編輯太btw。 – Andrew 2010-04-27 12:25:27

回答

2

我能想到的,沒有被提及的只有輕微的事情是,CAdapt需要CComBSTR以及CComPtr,因爲它重載operator&了。

事實上,這是超載operator&是必須進行CAdapt,因爲許多STL容器需要採取一些X的地址返回一個指針,說X.

+0

標記爲答案,即使我的問題是排序開放式結束,您是唯一回復:) – Andrew 2010-06-11 05:23:52

+3

對於VC2010 RTM中的所有STL容器和大多數STL算法,「CComPtr」和「CComBSTR」不再需要「CAdapt」。這是因爲它現在使用'std :: addressof'(C++ 0x中的一個新東西),而不是直接應用'operator&'來獲取對象的地址,並且該輔助函數可以在任何重載的'operator&'周圍工作,並且總是提供實際的指針。 – 2010-06-15 15:45:48

+0

Pavel;感謝您的補充信息,我還沒有看過VS2010。我需要閱讀std :: addressof - 看起來有趣! – 2010-06-17 18:52:52