Modifications apportées au produit : Visual C++ .NET 2003
Mise à jour : novembre 2007
Remarque : |
---|
Il se peut que certaines fonctionnalités mentionnées dans cette rubrique ne soient pas encore opérationnelles dans la version actuelle de Visual C++. Pour plus d'informations, consultez Modifications apportées à Visual C++ 2005 et aux éditions antérieures. |
Microsoft Visual C++ .NET 2003 offre de nombreuses améliorations et des nouvelles fonctionnalités :
Compilateur, langage et éditeur de liens Visual C++
Bibliothèques Visual C++
Environnement de développement
Concepteur Windows Forms pour les extensions managées pour C++
Modèle Automation de génération de projet
Compilateur, langage et éditeur de liens Visual C++
Le compilateur, l'éditeur de liens, les autres outils de génération et les fonctionnalités du langage Visual C++ présentés ci-dessous sont nouveaux dans Visual C++ .NET 2003.
Compilateur
Informations sur la façon d'exécuter une application Extensions managées pour C++ générée avec le compilateur de la version actuelle sur une version antérieure du runtime.
Une procédure pas à pas a été ajoutée indiquant comment porter une application native existante afin d'utiliser Extensions managées pour C++ : Procédure pas à pas : portage d'une application C++ native pour assurer l'interopérabilité avec des composants .NET Framework
Vous pouvez maintenant créer un délégué sur une méthode d'un type valeur.
La conformité du compilateur avec la norme C++ a été considérablement améliorée pour Visual C++ .NET 2003.
L'option /arch du compilateur a été ajoutée.
/Gf est désapprouvé et sera supprimé dans la prochaine version de Visual C++.
L'option du compilateur /G7 a été ajoutée.
L'option /GS du compilateur a été améliorée pour favoriser la protection des variables locales contre les dépassements de mémoire tampon.
L'option /noBool du compilateur a été supprimée. Le compilateur permet maintenant à bool d'apparaître uniquement sous la forme d'un mot clé (et non comme un identificateur) dans un fichier de code source Visual C++.
Le type long long est maintenant disponible comme un typedef de __int64. Le CRT n'offre toujours pas la prise en charge du type long long.
L'option /Zm du compilateur spécifie maintenant la limite d'allocation de mémoire d'en-tête précompilé.
L'intrinsèque _InterlockedCompareExchange est maintenant documenté.
L'intrinsèque _InterlockedDecrement est maintenant documenté.
L'intrinsèque _InterlockedExchange est maintenant documenté.
L'intrinsèque _InterlockedExchangeAdd est maintenant documenté.
L'intrinsèque _InterlockedIncrement est maintenant documenté.
_ReadWriteBarrier intrinsèque a été ajouté.
Attributs Visual C++
- L'attribut implements est maintenant documenté.
Éditeur de liens
Les options d'éditeur de liens suivantes ont été ajoutées :
/ASSEMBLYDEBUG
/ASSEMBLYLINKRESOURCE
/DELAYSIGN
/KEYFILE
/KEYCONTAINER
/SAFESEH
Préprocesseur
Le symbole _STATIC_CPPLIB est maintenant documenté pour une utilisation avec /MD.
Le symbole _CPPLIB_VER est désormais documenté.
Les attributs suivants de la directive #import sont maintenant documentés :
auto_search
auto_rename
no_search_namespace
rename_search_namespace
tlbid
MASM
La directive .SAFESEH et l'option /safeseh ml.exe ont été ajoutées.
Bibliothèques Visual C++
Ancienne bibliothèque iostream
L'ancienne bibliothèque iostream a été supprimée de Visual C++ dans cette version. Utilisez la bibliothèque C++ standard pour la programmation iostream.
Bibliothèque Runtime C
La documentation de la bibliothèque Runtime C inclut maintenant des informations pour les équivalents du .NET Framework.
_get_heap_handle a été ajouté.
La macro _CRTDBG_CHECK_DEFAULT_DF, utilisée dans _CrtSetDbgFlag, a maintenant la valeur 0, ce qui signifie qu'aucun contrôle de tas n'est effectué par défaut.
swprintf est maintenant compatible avec la norme ISO C (C++ seulement).
vswprintf n'a dorénavant qu'une forme C++ qui vous permet de spécifier le nombre maximal de caractères à stocker.
Pour plusieurs des fonctions multioctets, par exemple _mbsset, le CRT ne détectait pas toujours les chaînes multioctets non valides, où un octet de tête était suivi d'un octet de queue null. Le CRT comporte maintenant un plus grand nombre de contrôles de caractères multioctets non valides, où un octet de tête est suivi d'un octet de queue null.
_set_purecall_handler a été ajouté.
Précédemment, lorsqu'un processus chargeait une DLL qui faisait référence de manière statique à la bibliothèque CRT, la précision en virgule flottante était initialisée à 53 bits. Dans Visual C++ .NET 2003, la précision en virgule flottante n'est pas initialisée dans ce scénario. Cela pourrait constituer un changement majeur dans certaines applications qui dépendaient du CRT pour initialiser la précision en virgule flottante.
Le CRT dispose maintenant des formes float et double pour toutes les fonctions mathématiques. Ces nouvelles fonctions ne peuvent être appelées qu'à partir de Visual C++.
Bibliothèque C++ standard
Dans les versions précédentes, les entrées/sorties de caractères dans un flux pouvaient entraîner le stockage entraîner le stockage de valeurs character ou unsigned short si wchar_t n'était pas défini comme type natif. Maintenant, un type unsigned short est toujours traité comme un caractère.
Dans Visual C++ .NET 2003, les membres des fichiers d'en-tête <hash_map> et <hash_set> ne figurent plus dans l'espace de noms std, mais ont été transférés dans l'espace de noms stdext.
La bibliothèque C++ standard a été mise à jour pour tirer parti de la prise en charge améliorée du compilateur Visual C++ pour le standard C++. Par exemple, l'implémentation de la bibliothèque C++ standard fournie dans Visual C++ utilise maintenant une spécialisation partielle de modèle.
ATL
- Dans Visual Studio .NET 2003, le compilateur MIDL possède un paramètre par défaut /robust qui fait que les projets exécutés sous Windows NT 4 cessent de répondre.
Pour remplacer la valeur de l'indicateur du compilateur MIDL par /no_robust
Cliquez avec le bouton droit sur votre projet puis, dans le menu contextuel, cliquez sur Propriétés.
La boîte de dialogue Propriétés du projet s'affiche.
Dans le volet gauche, cliquez sur MIDL, puis sélectionnez Ligne de commande.
Entrez /no_robust dans la zone de texte Options supplémentaires.
La macro de conversion de chaînes ATL USES_CONVERSION a été remplacée par USES_CONVERSION_EX. Elle tentera d'allouer de l'espace sur la pile. S'il n'y a pas de place disponible sur la pile, elle tentera le tas. S'il n'y a pas d'espace sur le tas, elle retourne NULL. USES_CONVERSION_EX comporte un paramètre supplémentaire (threshold) que vous pouvez utiliser : si la demande est plus grande que la taille de threshold, la macro passera directement au tas.
_alloca a été remplacé par _atl_safe_alloca.
La classe CSocketAddr a été ajoutée pour fournir des méthodes indépendantes du protocole pour la gestion des adresses IPv6 et IPv4.
Lors de la génération d'un projet qui produit un fichier exécutable, ATL place automatiquement entre guillemets le nom du chemin d'accès créé au moment de l'exécution avec le paramètre de script Registrar %MODULE%. Si vous ne souhaitez pas que le nom du chemin d'accès inclue les guillemets, utilisez plutôt le nouveau paramètre %%MODULE_RAW%.
Lors de la génération d'un projet qui produit un fichier DLL, ATL n'ajoute pas de guillemets au nom du chemin d'accès si %MODULE% ou %MODULE_RAW% est utilisé.
MFC
Les maps de connexion ne sont plus compactées lorsqu'un point de connexion est supprimé ; le point de connexion supprimé est dorénavant remplacé par une valeur NULL. Par conséquent, vous devez rechercher les valeurs NULL lors de l'utilisation de CConnectionPoint::GetConnections ou CConnectionPoint::GetNextConnection.
Les fonctions suivantes peuvent maintenant lever des exceptions : CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator [], CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength et certains constructeurs CTime::CTime.
Les comportements d'AfxIsValidAddress et AfxIsValidString ont changé. Avec des projets compilés sans le mode débogage, les deux fonctions testent simplement la présence d'un argument non NULL.
CHeaderCtrl::GetOrderArray n'a plus de deuxième paramètre par défaut ; -1 n'est plus une valeur valide pour le deuxième paramètre.
CAsyncSocket possède de nouveaux membres reconnaissant IPv6 : GetPeerNameEx, GetSockNameEx, ReceiveFromEx et SendToEx.
ATL et MFC
La classe CImage assure dorénavant le suivi du nombre d'objets créés. Lorsque le compte passe à 0, la fonction GdiplusShutdown est automatiquement appelée pour libérer les ressources utilisées par GDI+. Cela empêche les ressources d'être libérées lorsque des objets CImage sont créés par une DLL.
La classe MFC CString a été réécrite sous forme de classe de modèles, CStringT. Cela vous permet d'utiliser CString dans des projets ATL sans établir de liaison dans la plus grande bibliothèque statique MFC ou dans une DLL.
Remarque : Cette version résout le problème décrit dans l'article de la Base de connaissances « PRB : Linking Errors When You Import CString-Derived Classes » (Q309801). Vous trouverez les articles de la Base de connaissances sur le CD-ROM MSDN Library ou à l'adresse https://support.microsoft.com/default.aspx. Si vous avez rencontré des erreurs d'éditeur de liens lors de l'exportation d'une classe dérivée CString à partir d'une DLL d'extension MFC dans Visual C++ .NET 2002 et avez appliqué la solution décrite dans cet article, vous devez supprimer le code de cette solution, puisque le problème a été résolu dans Visual C++ .NET 2003.
CStrBufT et CSimpleStringT possèdent désormais un paramètre de modèle supplémentaire indiquant si CString doit être utilisé à partir de la DLL MFC. Utilisez le typedef se trouvant dans la classe CStringT ou CSimpleStringT dans atlsimplstr.h (à la place du typedef global).
ATL Server
Dans un service Web XML créé avec ATL Server, l'action par défaut consiste à valider les paramètres SOAP après leur lecture. Pour désactiver la validation, définissez la macro _ATL_SOAP_NO_PARAMETER_VALIDATIONS.
SPROXY.EXE peut dorénavant traiter un fichier .discomap ou un fichier .wsdl. Spécifiez la nouvelle option /wsdl lorsque vous utilisez un fichier .wsdl comme entrée :
sproxy /wsdl <input_location>
où <input_location> est le chemin d'accès du fichier .wsdl à utiliser.
SPROXY.EXE peut maintenant traiter un fichier results.discomap :
sproxy results.discomap
Notez que le fichier .discomap contient un lien vers une copie locale du fichier .wsdl et utilise également une copie locale du fichier de schéma.
Environnement de développement
Remarque : |
---|
Il se peut que certaines fonctionnalités mentionnées dans cette rubrique ne soient pas encore opérationnelles dans la version actuelle de Visual C++. Pour plus d'informations, consultez Modifications apportées à Visual C++ 2005 et aux éditions antérieures. |
Lorsque vous ouvrez un projet Visual C++ de Visual Studio .NET dans Visual C++ .NET 2003, l'ancien fichier de projet est renommé et un nouveau fichier de projet pour l'environnement Visual C++ .NET 2003 est créé.
Le format d'un fichier .vcproj est maintenant documenté.
Les nouvelles fonctionnalités suivantes sont mises en œuvre dans l'environnement de développement :
Les macros $(WebDeployPath), $(WebDeployRoot), $(ParentName), $(RootNameSpace), $(SafeParentName) et $(SafeInputName) ont été ajoutées.
Il est maintenant possible de générer un projet sans générer aucun de ses projets dépendants.
Modèles de projets en extensions managées pour C++
Cette version inclut plusieurs nouveaux modèles de projet que vous pouvez utiliser pour créer des applications en extensions managées pour C++ :
Bibliothèque de contrôles Windows (.NET)
Application Windows Forms (.NET)
Service Windows (.NET)
En outre, les modèles de projets managés dans Visual C++ .NET 2002, ont été renommés pour cette version :
Application managée C++ se nomme maintenant Application console (.NET)
Bibliothèque de classes managées C++ se nomme maintenant Bibliothèque de classes (.NET)
Projet vide C++ managé se nomme maintenant Projet vide (.NET)
Service Web C++ managé se nomme désormais Service Web ASP.NET
Concepteur Windows Forms pour les extensions managées pour C++
Avec l'ajout du Concepteur Windows Forms pour cette version, Visual C++ introduit une solution de développement d'applications rapide pour la création de vos applications Windows Forms dans des extensions managées pour C++.
Cette fonction inclut la prise en charge complète de la boîte à outils et de l'Explorateur de serveurs, qui vous permet de faire glisser ou de couper et coller des contrôles et des composants directement sur votre application Windows Forms. En outre, vous pouvez facilement manipuler les propriétés de vos contrôles et de vos composants par l'intermédiaire de la grille des propriétés.
Modèle Automation de génération de projet
Visual C++ .NET offre de nouvelles pages de propriétés et un certain nombre de nouveaux objets, ainsi que de nouvelles propriétés et méthodes pour les objets existants qui améliorent le modèle de génération de projet.
Nouvelles pages de propriétés
Ressources managées, page de propriétés
XML Data Generator Tool, page de propriétés
Wrapper managé, page de propriétés
Wrapper managé auxiliaire, page de propriétés
Nouveaux objets
Objet VCALinkTool
Objet VCActiveXReference
Objet VCAssemblyReference
Objet VCAuxiliaryManagedWrapperGeneratorTool
Objet VCManagedResourceCompilerTool
Objet VCManagedWrapperGeneratorTool
Objet VCPrimaryInteropTool
Objet VCProjectReference
Objet VCReference
Collection VCReferences
Objet VCReferenceConfiguration
Objet VCXMLDataGeneratorTool
Nouveaux membres ou membres modifiés pour les objets existants
Plusieurs propriétés et méthodes nouvelles ou mises à jour ont été ajoutées à des objets existants. Notez que les modifications peuvent englober divers aspects, par exemple une signature mise à jour ou l'ajout de nouveaux membres.
Objet |
Membre nouveau ou modifié |
---|---|
Objet VCCLCompilerTool |
Propriété EnableEnhancedInstructionSet |
|
Propriété ToolKind |
Objet VCLinkerTool |
Propriété FixedBaseAddress |
|
Propriété ToolKind |
Objet VCLibrarianTool |
Propriété ToolKind |
Objet VCCustomBuildTool |
Propriété ToolKind |
Objet VCMidlTool |
Propriété ToolKind |
Objet VCResourceCompilerTool |
Propriété ToolKind |
Objet VCPreBuildEventTool |
Propriété ToolKind |
Objet VCPreLinkEventTool |
Propriété ToolKind |
Objet VCPostBuildEventTool |
Propriété ToolKind |
Objet VCBscMakeTool |
Propriété ToolKind |
Objet VCNMakeTool |
Propriété ToolKind |
Objet VCWebServiceProxyGeneratorTool |
Propriété Namespaces (VCProjectEngine) |
|
Propriété References |
|
Propriété ToolKind |
Objet VCWebDeploymentTool |
Propriété ToolKind |
Objet VCProject |
Méthode AddAssemblyReference |
|
Méthode AddActiveXReference |
|
Méthode AddProjectReference |
|
Méthode CanAddAssemblyReference |
|
Méthode CanAddActiveXReference |
|
Méthode CanAddProjectReference |
|
Propriété Object |
|
Propriété References |
|
Propriété ReferencesConsumableByDesigners |
|
Méthode RemoveReference |
|
Propriété RootNamespace |
|
Propriété VCReferences |
Objet VCFile |
Méthode AddFile |
|
Méthode CanAddFile |
|
Propriété FileType |
|
Propriété Items |
|
Propriété Object |
|
Méthode RemoveFile |
Objet VCFilter |
Propriété Object |
Objet VCConfiguration |
Propriété FullReferencesPath |
|
Propriété ReferencesPath |
|
Propriété ReferenceTools |
|
Propriété SatelliteDLLs |
|
Méthode StopBuild |
|
Propriété StyleSheets |
Objet VCStyleSheet |
Propriété FullReferencesPath |
|
Propriété ReferencesPath |
|
Propriété ReferenceTools |
|
Propriété StyleSheetDirectory |
|
Propriété StyleSheetName |
Objet VCFileConfiguration |
Propriété ProjectConfiguration |
|
Méthode Compile |
|
Propriété OutputUpToDate |
Objet VCProjectEngine |
Propriété ShowEnvironmentInBuildLog |