Jak převést z System::String * Char * v aplikaci Visual C++

Překlady článku Překlady článku
ID článku: 311259 - Produkty, které se vztahují k tomuto článku.
Tento článek odkazuje na následující Obory názvů knihovny tříd rozhraní.NET Framework společnosti Microsoft:
  • Prostoru System::Runtime::
  • Msclr::Interop
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje několik způsobů, jak převést z System::String * char * pomocí následujících kroků:
  • Spravované rozšíření jazyka C++ v aplikaci Microsoft Visual C++ .NET 2002 a Microsoft Visual C++ .NET 2003
  • C + +/ CLI v Microsoft Visual C++ 2005 a Microsoft Visual C++ 2008

Metoda 1

PtrToStringChars poskytuje vnitřní ukazatel na aktuální objekt řetězce. Pokud jste Tento ukazatel předat volání nespravované funkce, musíte nejprve připojit ukazatel Chcete-li zajistit, aby objekt nepřesune během asynchronního uvolnění proces sběru:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

Metoda 2

StringToHGlobalAnsi zkopíruje obsah spravovaného objektu řetězec do nativní haldy a převede jej do vnitrostátní normy ANSI (American Institute) průběžně. Tato metoda přiděluje paměť požadována nativní haldy:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Poznámka: V aplikaci Visual C++ 2005 a Visual C++ 2008, je nutné přidat možnost kompilátoru podporu runtime běžné jazyk (/ CLR: oldSyntax) úspěšně zkompilovat předchozí ukázkový kód. Chcete-li přidat možnost kompilátoru podporu runtime běžné jazyk, postupujte takto:
  1. Klepněte na tlačítko Projekta potom klepněte na tlačítko Název projektu Vlastnosti.

    Poznámka:Název projektu je zástupný symbol pro název projektu.
  2. Rozbalte položku Vlastnosti konfiguracea potom klepněte na tlačítko Obecné.
  3. V pravém podokně klepnutím vyberte Common Language Runtime Support, staré syntaxe (/ CLR: oldSyntax) v Common Language Runtime support nastavení projektu.
  4. Klepněte na tlačítko Použitía potom klepněte na tlačítko OK.
Další informace o možnostech podpory kompilátoru common language runtime navštivte následující Web společnosti Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Tento postup platí pro celý tento článek.

Metoda 3

Třída VC7 CString má konstruktor, který přijímá spravované ukazatel na řetězec a načte CString s obsahem:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Metoda 4

Visual C++ 2008 zavádí marshal_as<T> </T> zařazování třídy nápovědy a marshal_context() marshal pomocníka.
//#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;
Poznámka: Tento kód nelze kompilovat pomocí spravovaného rozšíření jazyka C++ v aplikaci Visual C++ .NET 2002 nebo Visual C++ .NET 2003. Používá nové C + +/ CLI syntaxi, která byla zavedena v aplikaci Visual C++ 2005 a nový kód oboru názvů msclr , který byl zaveden v roce 2008 Visaul C++. Úspěšně zkompilovat tento kód, musíte použít přepínače kompilátoru /clr/CLR C++ v aplikaci Microsoft Visual C++ 2008.

Řízená rozšíření pro C++ ukázkový kód (Visual C++ 2002 nebo 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 + +/ CLI kódu vzorku (Visual C++ 2005 a 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;
}

Odkazy

Pro jiné horní přístupů Visual C++ .NET společnosti Microsoft Knowledge Base články, navštivte následující Web společnosti Microsoft:
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-us%3Bvcnet

Vlastnosti

ID článku: 311259 - Poslední aktualizace: 30. května 2013 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Klíčová slova: 
kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku: 311259

Dejte nám zpětnou vazbu

 

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