2010-04-27 6 views
5

que estoy haciendo algunas cosas relacionadas con COM directshow tales como:consejos al usar objetos COM/CComPtr y el TEL

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

para almacenar una lista de objetos relacionados com DirectShow y su nombre descriptivo.

Después de encontrar this article (See:Problem 2) en cómo los cambios en el compilador VC10 podrían afectar el código anterior OK, me pregunto si hay más cosas de las que tener cuidado al mezclar STL y CComPtr o quizás solo mezclar STL y COM en general.

Cualquier consejo sería muy apreciada, gracias

+2

Gracias por el enlace a ese artículo. – sharptooth

+0

Pensé que 'CAdapt' fue recomendado o incluso necesario para STL <-> ATL bridging durante bastante tiempo? –

+0

Todavía soy un poco nuevo en COM, así que no estaba al tanto del uso de CAdapt con el STL, pero mirándolo, sí, parece que es recomendable, pero supongo que hay bastantes personas que podrían tener una desagradable sorpresa al intentar compilar su programa en VC10. Mi pregunta tiene como objetivo averiguar más casos en los que podría caer en una trampa desagradable. Gracias por las ediciones de etiquetas también por cierto. – Andrew

Respuesta

2

La única cosa ligera se me ocurre que no se ha mencionado es lo que se requiere para CAdaptCComBSTR, así como CComPtr, porque sobrecarga operator& también.

De hecho, es la sobrecarga operator& que hace CAdapt necesaria, ya que muchos contenedores STL requieren que la toma de la dirección de algo X devuelve un puntero a dicho X.

+0

Marcado como respuesta, aunque mi pregunta fue por tipo de abierto, usted es el único en responder :) – Andrew

+3

'CAdapt' ya no es necesario para' CComPtr' ni 'CComBSTR' para todos los contenedores STL y la mayoría de los algoritmos STL en VC2010 RTM. Esto se debe a que ahora usa 'std :: addressof' (una cosa nueva en C++ 0x) en lugar de aplicar' operator & 'directamente para obtener la dirección del objeto, y esa función auxiliar funciona con cualquier' operador '' sobrecargado, y siempre proporciona el puntero real –

+0

Pavel; gracias por la información agregada, todavía no he investigado VS2010. Necesito leer en std :: addressof - ¡parece interesante! –

Cuestiones relacionadas