문자열과 같은 특정 해시에 대한 COM 개체의 맵을 만들려고합니다. 이것은 구현중인 캐싱 알고리즘입니다. 아이디어는 이전 코드 줄에서 이미 열려있는 파일을로드하려고하면 이미 만든 메모리 블록을 IStream 형식으로 반환하고 파일을 메모리로 다시로드하지 않아도됩니다. 내가 겪었던 한 가지 문제는 마지막 참조가 삭제 될 때 자동으로 COM 객체가 파괴되는 것입니다. 원래 컨테이너는 해당 개체가 손상되었음을 인식하지 못하고 해제 된 개체에 액세스 할 때 파일을로드하는 대신 잘못된 메모리 핸들을 반환합니다. 이것을 구현하는 더 좋은 방법이 있습니까, 아니면 STL을 포기하고 대신 자신의 컨테이너를 만들어야합니까?COM 개체에서 std :: map을 사용 하시겠습니까?
0
A
답변
1
컨테이너에 인터페이스 포인터를 넣은 코드가 AddRef()를 호출하는 것을 잊어 버린 버그입니다. 안 함 참조 수를 늘리지 않고도 COM 인터페이스에 대한 포인터를 저장합니다.
+1
컨테이너가 AddRef를 호출하는 것을 잊지 않았으므로 처음에는 그렇게하지 않았습니다. AddRef를 컨테이너에 추가하기 전에 직접 호출하거나 스마트 포인터를 사용하십시오. Microsoft는 유용하게 2를 선택하여 제공합니다. –
+0
COM 개체를 포함 할 수있는 컨테이너에 대한 자체 알고리즘을 작성하게되었습니다. 코드베이스의 대부분을 다시 작성하는 것보다 간단 해 보였습니다. – Alex
관련 문제
- 1. std :: map을 std :: map에 삽입하십시오.
- 2. std :: map을 초기화해야합니까?
- 3. std :: map을 std :: set를 C++로 복사
- 4. 배열을 C# COM 개체에서 JavaScript로 전달 하시겠습니까?
- 5. wxWidgets std :: map을 나타내는 위젯?
- 6. C++ std :: map을 인수로 사용합니다.
- 7. std :: less <> 내 std :: map을 사용하지 못함
- 8. std :: map을 Objective-C로 변환 NSMutableArray 요소
- 9. 정적 std :: map을 초기화하는 방법은 무엇입니까?
- 10. std :: map을 사용하여 표현식 트리 평가하기
- 11. boost :: bind를 사용하여 std :: map을 반복 처리합니다.
- 12. QAbstractItemModel :: index를 오버라이드하고 std :: map을 액세스
- 13. std :: map을 boost :: bimap에 복사/삽입
- 14. COM 개체에서 Dispose 구현 방법
- 15. C# COM 개체에서 IProvideClassInfo 구현
- 16. CLR이 COM 개체에서 메모리를 해제합니까?
- 17. .txt 파일에서 Map을 얻는 방법 Properties를 사용 하시겠습니까?
- 18. C#/Silverlight의 COM 개체에서 함수에 액세스
- 19. Objective-C에서 std :: list를 사용 하시겠습니까?
- 20. std :: : std :: function에 바인드 하시겠습니까?
- 21. C# COM 개체에서 progID 가져 오기
- 22. interop 어셈블리없이 COM 개체에서 어떻게 작동합니까?
- 23. COM 개체에서 IDisposable을 사용하지 않는 이유는 무엇입니까?
- 24. COM 개체에서 메서드를 호출 할 수 없습니다.
- 25. 개체에서 전역 사용
- 26. 클래스에 정의 된 std :: map을 복사하는 중 오류가 발생했습니다.
- 27. 정적 함수를 사용하여 정적 std :: map을 채우려면 어떻게해야합니까?
- 28. Poco :: Any의 std :: map을 반복 할 수 없습니다. Any
- 29. std :: map을 여러 데이터 유형에서 작동하도록 비교하는 방법은 무엇입니까?
- 30. 상속 된 클래스의 std :: map을 만들 수 있습니까?
지도에서 COM 개체에 대한 스마트 포인터를 사용하십시오. 이렇게하면 더 이상 필요하지 않게 될 때까지 참조를 보유하여 조기에 삭제되지 않도록합니다. –