Comment convertir partir de System::String à Char dans Visual C++

Traductions disponibles Traductions disponibles
Numéro d'article: 311259 - Voir les produits auxquels s'applique cet article
Cet article fait référence à celui-ci Espaces de noms bibliothèque de classes.NET Framework Microsoft :
  • System::Runtime:: InteropServices
  • Msclr::Interop
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit différentes manières de convertir partir de System::String à char en utilisant les éléments suivants :
  • Les extensions managées pour C++ dans Microsoft Visual C++ .NET 2002 et dans Microsoft Visual C++ .NET 2003
  • C + c++ / CLI dans Microsoft Visual C++ 2005 et dans Microsoft Visual C++ 2008

Méthode 1

PtrToStringChars vous donne un pointeur intérieur vers l'objet de chaîne réelle. Si vous Passez ce pointeur à un appel de fonction non managée, vous devez tout d'abord épingler le pointeur Pour vous assurer que l'objet ne bouge pas pendant un garbage asynchrone processus de collecte :
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

Méthode 2

StringToHGlobalAnsi copie le contenu d'un objet chaîne managé dans un tas natif, et puis les convertit en American National Standards Institute (ANSI) il formater à la volée. Cette méthode alloue la mémoire de tas natif requis :
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Remarque : Dans Visual C++ 2005 et Visual C++ 2008, vous devez ajouter l'option du compilateur de common language runtime support (/ CLR: oldSyntax) pour compiler correctement l'exemple de code précédent. Pour ajouter l'option du compilateur de common language runtime prise en charge, procédez comme suit :
  1. Cliquez sur Projet, puis cliquez sur Nomprojet Propriétés.

    RemarqueNomprojet est un espace réservé pour le nom du projet.
  2. Développez Propriétés de configuration, puis cliquez sur Général.
  3. Dans le volet droit, cliquez sur pour sélectionner Prise en charge du Common Language Runtime, ancienne syntaxe (/ CLR: oldSyntax) dans le Prise en charge du Common Language Runtime paramètres du projet.
  4. Cliquez sur Appliquer, puis cliquez sur OK.
Pour plus d'informations sur les options de common language runtime prise en charge du compilateur, visitez le site Web de Microsoft Developer Network (MSDN) à l'adresse suivante :
http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
Ces étapes s'appliquent à l'article complet.

Méthode 3

La classe VC7 CString possède un constructeur qui accepte un pointeur de chaîne managé et charge CString avec son contenu :
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Méthode 4

Visual C++ 2008 introduit le marshal_as<T> </T> marshaler la classe d'aide et de la classe d'assistance de marshal marshal_context() .
//#include <msclr/marshal.h>
//using namespace msclr::interop;
marshal_context ^ context = gcnew marshal_context();
const char* str4 = context->marshal_as<const char*>(str);
puts(str4);
delete context;
Remarque : Ce code n'est pas compilé à l'aide des extensions managées pour C++ dans Visual C++ .NET 2002 ou dans Visual C++ .NET 2003. Il utilise le nouveau C + c++ / syntaxe CLI qui a été introduite dans Visual C++ 2005 et le nouveau code d'espace de noms msclr qui a été introduit dans Visual C++ 2008. Pour compiler correctement ce code, vous devez utiliser le commutateur de compilateur /clr C++ dans Microsoft Visual C++ 2008.

Extensions managées pour C++ des exemples de code (Visual C++ 2002 ou Visual C++ 2003)

//compiler option: cl /clr  
#include <vcclr.h>
#include <atlstr.h>
#include <stdio.h>
#using <mscorlib.dll>
using namespace System;
using namespace System::Runtime::InteropServices;

int _tmain(void)
{
   	System::String * str = S"Hello world\n";

	//method 1
	const __wchar_t __pin * str1 = PtrToStringChars(str);
	wprintf(str1);	

	//method 2
	char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
	printf(str2);
	Marshal::FreeHGlobal(str2);

	//method 3
	CString str3(str); 
	wprintf(str3);

    return 0;
}
				

C + c++ / exemple de code CLI (Visual C++ 2005 et Visual C++ 2008)

//compiler option: cl /clr 

#include <atlstr.h>
#include <stdio.h>
#using <mscorlib.dll>

using namespace System;
using namespace System::Runtime::InteropServices;

#if _MSC_VER > 1499 // Visual C++ 2008 only
#include <msclr/marshal.h>
using namespace msclr::interop;
#endif 

int _tmain(void)
{
		     System::String ^ str = "Hello world\n";

	     /method 1
	     pin_ptr<const wchar_t> str1 = PtrToStringChars(str);
     	wprintf(str1);	

	     //method 2
	     char* str2 = (char*)Marshal::StringToHGlobalAnsi(str).ToPointer();
     	printf(str2);
	     Marshal::FreeHGlobal((IntPtr)str2);

	     //method 3
	     CString str3(str); 
	     wprintf(str3);

     	//method 4
#if _MSC_VER > 1499 // Visual C++ 2008 only
	     marshal_context ^ context = gcnew marshal_context();
	     const char* str4 = context->marshal_as<const char*>(str);
     	puts(str4);
	     delete context;
#endif

	return 0;
}

Références

Pour d'autres consultés Base de connaissances Microsoft Visual C++ .NET articles, visitez le site Web de Microsoft à l'adresse suivante :
http://support.Microsoft.com/default.aspx?xmlid=fh%3ben-us%3Bvcnet

Propriétés

Numéro d'article: 311259 - Dernière mise à jour: vendredi 30 novembre 2012 - Version: 7.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Initiation
  • Microsoft Visual C++ .NET 2002 Initiation
Mots-clés : 
kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 311259
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com