Compartir a través de


Cambios del producto: Visual C++ .NET 2003

Actualización: noviembre 2007

Nota:

Algunas de las funciones mencionadas en este tema pueden no estar ya incorporadas en la versión actual de Visual C++. Para obtener más información, vea Cambios en Visual C++ 2005 y versiones anteriores.

Microsoft Visual C++ .NET 2003 proporciona muchas mejoras y varias características nuevas:

  • Compilador, vinculador y lenguaje Visual C++

  • Bibliotecas de Visual C++

  • Entorno de desarrollo

  • Diseñador de Windows Forms para las extensiones administradas para C++

  • Modelo de automatización de generación de proyectos

Compilador, vinculador y lenguaje Visual C++

Las siguientes características del compilador, vinculador, otras herramientas de generación y el lenguaje Visual C++ son nuevas en Visual C++ .NET 2003.

Compilador

  • Información de cómo ejecutar una aplicación de Extensiones administradas para C++ generada con el compilador de la versión actual en una versión anterior del motor en tiempo de ejecución.

  • Se ha agregado este tutorial que muestra cómo trasladar una aplicación nativa existente para utilizar las Extensiones administradas para C++: Tutorial: Trasladar una aplicación de C++ nativa existente para que interactúe con componentes de .NET Framework.

  • Ahora es posible crear un delegado en un método de un tipo de valor.

  • La conformidad del compilador con el estándar de C++ se ha mejorado significativamente para Visual C++ .NET 2003.

  • Se ha agregado la opción del compilador /arch.

  • La opción /Gf se considera obsoleta y se quitará en la próxima versión de Visual C++.

  • Se ha agregado la opción del compilador /G7.

  • Se ha mejorado la opción del compilador /GS para ayudar a proteger variables locales de saturaciones de búfer directas.

  • Se ha quitado la opción del compilador /noBool. El compilador ahora sólo permite bool como palabra clave, no como identificador, en un archivo de código fuente de Visual C++.

  • El tipo long long ahora está disponible como un typedef de __int64. Tenga en cuenta que CRT aún no admite el tipo long long.

  • La opción del compilador /Zm especifica ahora el límite de asignación de memoria del encabezado precompilado.

  • Ahora se documenta la función intrínseca _InterlockedCompareExchange.

  • Ahora se documenta la función intrínseca _InterlockedDecrement.

  • Ahora se documenta la función intrínseca _InterlockedExchange.

  • Ahora se documenta la función intrínseca _InterlockedExchangeAdd.

  • Ahora se documenta la función intrínseca _InterlockedIncrement.

  • Se ha agregado la función intrínseca _ReadWriteBarrier.

Atributos de Visual C++

  • Ahora se documenta el atributo implements.

Vinculador

Se han agregado las opciones del vinculador siguientes:

  • /ASSEMBLYDEBUG

  • /ASSEMBLYLINKRESOURCE

  • /DELAYSIGN

  • /KEYFILE

  • /KEYCONTAINER

  • /SAFESEH

Preprocesador

  • Ahora se documenta el símbolo _STATIC_CPPLIB para su uso con /MD.

  • Ahora se documenta el símbolo _CPPLIB_VER.

  • Ahora se documentan los atributos siguientes de la directiva #import:

    • auto_search

    • auto_rename

    • no_search_namespace

    • rename_search_namespace

    • tlbid

MASM

Se ha agregado la directiva .SAFESEH y la opción /safeseh ml.exe.

Bibliotecas de Visual C++

Antigua biblioteca iostream

La antigua biblioteca iostream se ha quitado de esta versión de Visual C++. Utilice la Biblioteca estándar de C++ para la programación de E/S.

Biblioteca en tiempo de ejecución de C

  • La documentación de la biblioteca en tiempo de ejecución de C incluye información para los equivalentes en .NET Framework.

  • Se ha agregado _get_heap_handle.

  • La macro _CRTDBG_CHECK_DEFAULT_DF, utilizada en _CrtSetDbgFlag, ahora se define en cero, lo que significa que no se realiza de forma predeterminada ninguna comprobación del montón.

  • swprintf es ahora compatible con el estándar ISO C (sólo C++).

  • vswprintf tiene ahora una forma (sólo en C++) que permite especificar el número máximo de caracteres que se van a almacenar.

  • Para varias funciones multibyte, como _mbsset, CRT no siempre detectaba las cadenas multibyte no válidas, en las que un byte inicial podía ir seguido de un byte final nulo. CRT ahora incorpora más comprobaciones para detectar caracteres multibyte no válidos, en los que un byte inicial aparece seguido de un byte final nulo.

  • Se ha agregado _set_purecall_handler.

  • Anteriormente, cuando un proceso cargaba un archivo DLL que hacía referencia estáticamente a la biblioteca CRT, la precisión de punto flotante se inicializaba a 53 bits. En Visual C++ .NET 2003, la precisión de punto flotante no se inicializa en este escenario. Esto puede ocasionar un cambio importante en algunas aplicaciones existentes que se basan en CRT para inicializar la precisión de punto flotante.

  • CRT tiene ahora formas float y double para todas las funciones matemáticas. Estas funciones nuevas solo son invocables desde Visual C++.

Biblioteca estándar de C++

En versiones anteriores, la entrada y salida de caracteres en una secuencia podía ocasionar que se almacenaran valores de tipo char o unsigned short si wchar_t no estaba definido como tipo nativo. Ahora, un tipo unsigned short siempre se trata como carácter.

En Visual C++ .NET 2003, los miembros de los archivos de encabezado <hash_map> y <hash_set> ya no están en el espacio de nombres std, sino que se han movido al espacio de nombres stdext.

La Biblioteca estándar de C++ se ha actualizado para aprovechar la compatibilidad mejorada del compilador de Visual C++ con el estándar de C++. Por ejemplo, la implementación de la Biblioteca estándar de C++ incluida en Visual C++ ahora utiliza la especialización parcial de plantillas.

ATL

  • En Visual Studio .NET 2003, el compilador MIDL dispone de una configuración predeterminada de /robust, que provoca una interrupción de la ejecución de los proyectos en Windows NT 4.

Para cambiar el indicador del compilador MIDL a /no_robust

  1. Haga clic en el proyecto con el botón secundario y seleccione Propiedades en el menú de acceso directo.

    Aparecerá el cuadro de diálogo Propiedades del proyecto.

  2. En el panel izquierdo haga clic en MIDL y, a continuación, seleccione Línea de comandos.

  3. Escriba /no_robust en el cuadro de texto Opciones adicionales.

  • La macro para la conversión de cadenas USES_CONVERSION de ATL se ha sustituido por USES_CONVERSION_EX. El objetivo de dicha macro es asignar espacio en la pila. Si no hay espacio disponible en la pila, intentará asignarlo en el montón. Si tampoco hay espacio en el montón, devolverá NULL. USES_CONVERSION_EX tiene un parámetro adicional (threshold): si la solicitud es mayor que el tamaño de threshold, la macro irá directamente al montón.

  • _alloca se ha sustituido por _atl_safe_alloca.

  • Se ha agregado la clase CSocketAddr para proporcionar métodos independientes de protocolo para trabajar con direcciones IPv6 e IPv4.

  • Al generar un proyecto que produce un ejecutable, ATL agrega automáticamente comillas al nombre de la ruta de acceso creada en tiempo de ejecución con el parámetro de secuencia de comandos del registrador %MODULE%. Si no desea que el nombre de ruta de acceso incluya las comillas, utilice en su lugar el nuevo parámetro %MODULE_RAW%.

    Al generar un proyecto que da como resultado una DLL, ATL no agregará comillas al nombre de ruta de acceso cuando se utilice %MODULE% o %MODULE_RAW%.

MFC

  • Los mapas de conexiones ya no se compactan cuando se elimina un punto de conexión; en su lugar, el punto de conexión eliminado se sustituye por un NULL. Por consiguiente, debería comprobar NULL al utilizar CConnectionPoint::GetConnections o CConnectionPoint::GetNextConnection.

  • Las funciones siguientes ahora pueden iniciar excepciones: CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator [], CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength y algunos constructores CTime::CTime.

  • Los comportamientos de AfxIsValidAddress y AfxIsValidString han cambiado. En versiones que no son de depuración, ambas funciones comprueban que el argumento no sea NULL.

  • CHeaderCtrl::GetOrderArray ya no tiene un segundo parámetro predeterminado; -1 ya no es un valor válido para el segundo parámetro.

  • CAsyncSocket tiene los nuevos miembros relacionados con IPv6: GetPeerNameEx, GetSockNameEx, ReceiveFromEx y SendToEx.

ATL y MFC

  • La clase CImage realiza ahora un seguimiento del número de objetos creados. Cuando el recuento llega a 0, se llama automáticamente a la función GdiplusShutdown para liberar los recursos utilizados por GDI+. De esta forma se evita que no se liberen los recursos cuando un archivo DLL crea objetos CImage.

  • Se ha vuelto a escribir la clase CString de MFC como una clase de plantilla, CStringT. Esto permite utilizar CString en proyectos de ATL sin vincular la biblioteca o el archivo DLL estáticos de MFC.

    Nota:

    Esta versión soluciona el problema descrito en el artículo "PRB: Linking Errors When You Import CString-Derived Classes" (Q309801) de Knowledge Base. Encontrará artículos de Knowledge Base en el CD-ROM de MSDN Library o en la dirección https://support.microsoft.com/default.aspx. Si encontró errores del vinculador al exportar una clase derivada CString de un archivo DLL de extensión de MFC en Visual C++ .NET 2002 y aplicó la solución descrita en este artículo, quite el código de dicha solución, ya que el problema se ha resuelto en Visual C++ .NET 2003.

  • CStrBufT y CSimpleStringT tienen ahora un parámetro de plantilla adicional que indica si se va utilizar CString desde el archivo DLL de MFC. Utilice el typedef que se encuentra en las clases CStringT o CSimpleStringT de atlsimplstr.h (en lugar del typedef global).

Servidor ATL

  • En un servicio Web XML creado con el servidor ATL, la acción predeterminada es validar los parámetros de SOAP una vez leídos. Para desactivar la validación, defina la macro _ATL_SOAP_NO_PARAMETER_VALIDATIONS.

  • SPROXY.EXE ahora puede procesar un archivo .discomap o .wsdl. Especifique la nueva opción /wsdl cuando utilice un archivo .wsdl como entrada:

    sproxy /wsdl <input_location>
    

    donde <input_location> es la ruta de acceso del archivo .wsdl que se va a utilizar.

    Ahora, SPROXY.EXE puede procesar un archivo .discomap de resultados:

    sproxy results.discomap
    

    Tenga en cuenta que el archivo .discomap contiene un vínculo a una copia local del archivo .wsdl y además utiliza una copia local del archivo de esquema.

Entorno de desarrollo

Nota:

Algunas de las funciones mencionadas en este tema pueden no estar ya incorporadas en la versión actual de Visual C++. Para obtener más información, vea Cambios en Visual C++ 2005 y versiones anteriores.

Al abrir un proyecto de Visual C++ desde Visual Studio .NET en Visual C++ .NET 2003, se cambiará el nombre del antiguo archivo de proyecto; asimismo, se creará un nuevo archivo de proyecto para el entorno Visual C++ .NET 2003.

Ahora se documenta el formato de un archivo .vcproj.

En el entorno de desarrollo aparecen las funciones nuevas siguientes:

  • Se han agregado las macros $(WebDeployPath), $(WebDeployRoot), $(ParentName), $(RootNameSpace), $(SafeParentName) y $(SafeInputName).

  • Ahora es posible generar un proyecto sin generar ninguno de los proyectos dependientes de los proyectos.

Plantillas de proyectos de Extensiones administradas para C++

Esta versión incluye varias plantillas de proyectos nuevas que se pueden utilizar para crear aplicaciones en Extensiones administradas para C++:

  • Biblioteca de controles de Windows (.NET)

  • Aplicación de Windows Forms (.NET)

  • Servicio de Windows (.NET)

Además, en esta versión se ha cambiado el nombre de las siguientes plantillas de proyectos administrados en Visual C++ .NET 2002:

  • Aplicación C++ administrada ahora se denomina Aplicación de consola (.NET)

  • Biblioteca de clases C++ administrada ahora se denomina Biblioteca de clases (.NET)

  • Proyecto C++ administrado vacío ahora se denomina Proyecto vacío (.NET)

  • Servicio Web C++ administrado ahora se denomina Servicio Web ASP.NET

Diseñador de Windows Forms para las extensiones administradas para C++

En esta versión, además del Diseñador de Windows Forms, Visual C++ introduce una solución de desarrollo rápido de aplicaciones para la creación de las aplicaciones de formularios Windows Forms en la Extensiones administradas para C++.

Estas características incluyen la compatibilidad total del Cuadro de herramientas y el Explorador de servidores, que permite arrastrar y soltar o cortar y pegar controles y componentes directamente en la aplicación de formularios Windows Forms. Además, puede manipular fácilmente las propiedades de los controles y componentes mediante la Cuadrícula de propiedades.

Modelo de automatización de generación de proyectos

Visual C++ .NET proporciona una nueva página de propiedades y varios objetos nuevos, así como nuevas propiedades y métodos para los objetos existentes que mejoran el modelo de generación del proyecto.

Nuevas páginas de propiedades

Página de propiedades Recursos administrados

Página de propiedades Herramienta generadora de datos HTML

Página de propiedades Contenedor administrado

Página de propiedades Contenedor administrado auxiliar

Nuevos objetos

Objeto VCALinkTool

Objeto VCActiveXReference

Objeto VCAssemblyReference

Objeto VCAuxiliaryManagedWrapperGeneratorTool

Objeto VCManagedResourceCompilerTool

Objeto VCManagedWrapperGeneratorTool

Objeto VCPrimaryInteropTool

Objeto VCProjectReference

Objeto VCReference

Colección VCReferences

Objeto VCReferenceConfiguration

Objeto VCXMLDataGeneratorTool

Miembros nuevos o cambiados para objetos existentes

Se han agregado varias propiedades y métodos nuevos o actualizados a los objetos existentes. Tenga en cuenta que los cambios pueden abarcar varios aspectos, como una fecha actualizada o la adición de nuevos miembros.

Objecto

Miembro nuevo o cambiado

Objeto VCCLCompilerTool

Propiedad EnableEnhancedInstructionSet

 

Propiedad ToolKind

Objeto VCLinkerTool

Propiedad FixedBaseAddress

 

Propiedad ToolKind

Objeto VCLibrarianTool

Propiedad ToolKind

Objeto VCCustomBuildTool

Propiedad ToolKind

Objeto VCMidlTool

Propiedad ToolKind

Objeto VCResourceCompilerTool

Propiedad ToolKind

Objeto VCPreBuildEventTool

Propiedad ToolKind

Objeto VCPreLinkEventTool

Propiedad ToolKind

Objeto VCPostBuildEventTool

Propiedad ToolKind

Objeto VCBscMakeTool

Propiedad ToolKind

Objeto VCNMakeTool

Propiedad ToolKind

Objeto VCWebServiceProxyGeneratorTool

Propiedad Namespace (VCProjectEngine)

 

Propiedad References

 

Propiedad ToolKind

Objeto VCWebDeploymentTool

Propiedad ToolKind

Objeto VCProject

Método AddAssemblyReference

 

Método AddActiveXReference

 

Método AddProjectReference

 

Método CanAddAssemblyReference

 

Método CanAddActiveXReference

 

Método CanAddProjectReference

 

Propiedad Object

 

Propiedad References

 

Propiedad ReferencesConsumableByDesigners

 

Método RemoveReference

 

Propiedad RootNamespace

 

Propiedad VCReferences

Objeto VCFile

Método AddFile

 

Método CanAddFile

 

Propiedad FileType

 

Propiedad Items

 

Propiedad Object

 

Método RemoveFile

Objeto VCFilter

Propiedad Object

Objeto VCConfiguration

Propiedad FullReferencesPath

 

Propiedad ReferencesPath

 

Propiedad ReferenceTools

 

Propiedad SatelliteDLLs

 

Método StopBuild

 

Propiedad StyleSheets

Objeto VCStyleSheet

Propiedad FullReferencesPath

 

Propiedad ReferencesPath

 

Propiedad ReferenceTools

 

Propiedad StyleSheetDirectory

 

Propiedad StyleSheetName

Objeto VCFileConfiguration

Propiedad ProjectConfiguration

 

Método Compile

 

Propiedad OutputUpToDate

Objeto VCProjectEngine

Propiedad ShowEnvironmentInBuildLog

Vea también

Otros recursos

Cambios del producto en las versiones de Visual C++