visual varias trucos studio seleccionar multi lineas linea fuente code cambiar ajuste visual-studio-2008 visual-c++ visual-c++-2008 name-decoration

visual-studio-2008 - trucos - seleccionar varias lineas visual studio code



¿Cómo puedo aumentar la longitud permitida del nombre decorado en VC9(MSVC 2008)? (3)

Dado que no parece haber una manera de aumentar la limitación interna del compilador en la longitud del nombre decorado, mordí la viñeta e hice el cambio sugerido en MSDN. ver: http://msdn.microsoft.com/en-us/library/074af4b6.aspx

Solo tuve que cambiar el primer typedef por una estructura. Esto requirió otros 200 cambios en el código heredado, que fue tedioso, pero por lo demás no fue difícil. Sin embargo, pasaré la próxima semana más o menos en las pruebas de regresión para asegurarme de que esto no arruine algo.

Aquí está el cambio básico: (nota que me vi obligado a agregar algunos ctors a la estructura)

enum Type{ TYPE_COUNT, TYPE_VALUE }; struct Containers { MyVector<Container*, CriticalSectionLock > Element; Containers(int num, Container* elem):Element(num, elem){} Containers(){} }; typedef MyVector< MyClassType*, CriticalSectionLock >::const_iterator const_iterator_type; typedef MyVector< stl::pair< string, Type > >::const_iterator const_iterator_def; typedef MyVector< Container** >::const_iterator const_iterator_container; typedef MyVector< stl::pair < MyBase*, MyVector< stl::pair< Container**, Containers* > > > >::const_iterator const_iterator;

Tengo un conjunto bastante grande y complejo de programas para portar de VC8 a VC9. Uno de los módulos tiene varios typedefs en capas, lo que hace que el compilador genere una advertencia C4503 (nombre decorado truncado). El archivo LIB generado no se vinculará correctamente a otros módulos en el proyecto. VC8 no tuvo problemas con esto, lo que me llevó a concluir que el proceso de decoración ha cambiado para generar nombres aún más largos, o que el límite interno para la longitud de un nombre decorado ha disminuido. ¿Cuál es la mejor manera de superar esto?

Por razones de código heredado, la sugerencia de MSDN de reemplazar typedefs con structs no es práctica.

Los typedefs en cuestión son (código desinfectado):

enum Type{ TYPE_COUNT, TYPE_VALUE }; typedef MyVector< Container*, CriticalSectionLock > Containers; typedef MyVector< MyClassType*, CriticalSectionLock >::const_iterator const_iterator_type; typedef MyVector< stl::pair< string, Type > >::const_iterator const_iterator_def; typedef MyVector< Container** >::const_iterator const_iterator_container; typedef MyVector< stl::pair < MyBase*, MyVector< stl::pair< Container**, Containers* > > > >::const_iterator const_iterator;


#pragma warning(disable:xxx).

El hombre de la vida es demasiado bajito.


@Roel: Como mencioné en la publicación original: "El archivo LIB generado no se vinculará correctamente a otros módulos en el proyecto".

IOW, esto es más que solo una ''advertencia''. Causa que el proyecto NO FUNCIONE.

Mi corrección publicada es algo difícil y tediosa de implementar por completo, pero funciona.