// chap5_clr_string.cpp : fichier projet principal.

#include "stdafx.h"

using namespace System; // évite de tout préfixer par System::
using namespace System::Runtime::InteropServices;

int main(array<System::String ^> ^args)
{
	char* c = "Bonjour C++";
	String ^ chaine1 = gcnew String(c); // construction à partir d'un char*
	String ^ chaine2 = L"C++ CLI c'est formidable"; // Littérale de chaîne .NET
	String ^ chaine3 = "Un univers à découvrir"; // idem

    /*Console::WriteLine(chaine1);
	Console::WriteLine(chaine2 + ". " + chaine3);*/

	// manipuler les chaînes
	String ^ prefixe = "Bon";
	if(chaine1->StartsWith(prefixe))
		Console::WriteLine("chaîne1 commence par {0}", prefixe);

	// itérer sur les caractères avec une boucle for each
	for each(wchar_t c in chaine1)
	{
		Console::Write(" " + c);
	}
	Console::WriteLine();

	// itérer classiquement avec un for
	for(int i=0; i<chaine2->Length; i++)
		Console::Write( chaine2[i] );

	Console::WriteLine();

	// conversion vers char* (utile pour les accès natifs à Win32)	
	char* cetoile = 
		static_cast<char *> (Marshal::StringToHGlobalAnsi(chaine1).ToPointer());
	
	// utilisation de la chaîne
	// ...

	// librérer le buffer
	Marshal::FreeHGlobal(safe_cast<IntPtr>(cetoile));

    return 0;
}
