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
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.
En el panel izquierdo haga clic en MIDL y, a continuación, seleccione Línea de comandos.
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 |