我試圖創建一個COM對象的映射到特定的散列,就像一個字符串。這是我正在執行的一種緩存算法。這個想法是,如果你嘗試加載一個已經被前面一行代碼打開的文件,它會將已經創建的內存塊作爲IStream返回,而不用再把文件重新加載到內存中。我碰到的一個問題是COM對象在刪除最後一個引用時會自動銷燬自己。原始容器不知道該對象已被銷燬,並且,當您訪問已釋放的對象時,它將返回無效的內存句柄,而不是加載該文件。有沒有更好的方法來實現這一點,或者我應該放棄STL而改用自己的容器?在COM對象上使用std :: map?
0
A
回答
1
這是一個錯誤,將接口指針放在容器中的代碼忘記調用AddRef()。 永不存儲指向COM接口的指針,而不增加它們的引用計數。
+1
容器沒有*忘記*調用AddRef,它從來沒有被設計爲首先這樣做。在將其添加到容器之前自己調用AddRef,或者使用智能指針 - Microsoft有助於提供2個選項。 – 2012-01-27 19:33:30
+0
我最終爲可以包含COM對象的容器編寫了自己的算法。看起來比重寫大部分代碼庫更簡單。 – Alex 2012-03-23 19:04:43
相關問題
- 1. 將對象存儲在std :: map中
- 2. 使用COM對象
- 3. 使用COM對象
- 4. 將堆對象分配給std :: map
- 5. C++ std :: map在「*」上失敗?
- 6. 使用對象作爲鍵時保持std :: map平衡
- 7. 在std :: map中插入std :: map
- 8. 在對象上使用.map()不會在分片上執行
- 9. 使用std :: string作爲std :: map的鍵
- 10. STLs std :: map和std :: vector;檢查地圖中的對象類型
- 11. 使用std :: map與指針
- 12. 使用std :: map和Eigen 3
- 13. 使用std :: map時出錯
- 14. 如何使用std :: lock_guard鎖定對std :: map的讀寫權限?
- 15. 我可以使用std :: partial_sort對std :: map進行排序嗎?
- 16. 使用std :: set_symmetric_difference時在std :: map上使用STL容器的模板類型
- 17. Mac上的Pywin32(com對象)
- 18. 在IIS 7中使用COM對象
- 19. 在T4模板中使用COM對象?
- 20. 在C++中使用COM對象dll
- 21. 在COM對象中使用Minidump
- 22. std :: map
- 23. std :: map插入或std :: map查找?
- 24. 如何在std :: map中插入自定義對象
- 25. 對象沒有在範圍內聲明(std :: map)
- 26. 直接在std :: map的映射對
- 27. 在COM對象上執行偵測
- 28. 在C#COM上實現IProvideClassInfo對象
- 29. 在Windows 7上註冊COM對象
- 30. 在非Microsoft平臺上使用組件對象模型(COM)
使用智能指針指向地圖中的COM對象。這樣它將保留一個引用,直到不再需要爲止,防止它被過早刪除。 – 2012-01-27 18:10:11