Teď jste offline a čekáte, až se znova připojí internet.

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

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
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
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):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:
kbVC700

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 311259 - Poslední kontrola: 05/30/2013 19:33:00 - Revize: 6.0

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

  • kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMtcs
Váš názor
did=1&t=">cript>
Paraguay - Español
Venezuela - Español
?DI=4050&did=1&t=">d=1&t=">ipt" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" >>ascript' src='" + (window.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");