Ako previesť z System::String * Char * v Visual C++

Preklady článku Preklady článku
ID článku: 311259 - Zobraziť produkty, ktorých sa tento článok týka.
Tento článok sa vzťahuje na nasledujúce Microsoft knižnica tried .NET Framework názvov:
  • System::Runtime::InteropServices
  • Msclr::Interop
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

Súhrn

Tento článok opisuje niekoľko spôsobov, ako previesť z System::String * znak * pomocou nasledujúcich krokov:
  • Riadené rozšírenia pre C++ Microsoft Visual C++ .NET 2002 a Microsoft Visual C++ .NET 2003
  • C + +/ CLI v Microsoft Visual C ++ 2005 a Microsoft Visual C++ 2008

Metóda 1

PtrToStringChars vám dáva vnútorný ukazovateľ na skutočný objekt String. Ak ste odovzdať tento ukazovateľ nespravované funkcie volania, musíte najprv pripnúť ukazovateľ aby sa zabezpečilo, že sa objekt nepohybuje počas asynchrónneho odpadky proces zhromažďovania:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

Metóda 2

StringToHGlobalAnsi skopíruje obsah spravovaných objekt String do natívnej haldy, prevádza sa do národnej normy ANSI (American Institute) formátovať za behu. Táto metóda alokuje pamäť vyžaduje natívnej 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 Visual C ++ 2005 a Visual C++ 2008, musíte pridať spoločný jazyk runtime podporu kompilátor možnosť (/ clr:oldSyntax) úspešne zostaviť predchádzajúcej ukážke kódu. Ak chcete pridať spoločný jazyk runtime podporu kompilátor možnosť, postupujte nasledovne:
  1. Kliknite na tlačidlo Projekt, a potom kliknite na tlačidlo ProjectName Vlastnosti.

    PoznámkaProjectName je zástupný symbol pre meno projektu.
  2. Rozšíriť Konfigurácia vlastností, a potom kliknite na tlačidlo Všeobecné.
  3. Na pravej table, kliknite na položku Spoločný jazyk Runtime podporu, staré Syntax (/ clr:oldSyntax) v Spoločný jazyk Runtime podporu nastavenia projektu.
  4. Kliknite na tlačidlo Uplatňovať, a potom kliknite na tlačidlo ok.
Ďalšie informácie o spoločný jazyk runtime podporu kompilátor možnosti, nájdete na webovej lokalite webová lokalita Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
Tieto kroky sa vzťahujú na celý článok.

Metóda 3

VC7 CString trieda má konštruktérom, ktorý prevezme spravovaných ukazovateľ reťazca a načíta CString s jeho obsahom:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Metóda 4

Visual C++ 2008 zavádza marshal_as<T> </T> maršal Pomocník triedy a triedy pomocného objektu maršal 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;
Poznámka Tento kód nie je kompilovat pomocou riadené rozšírenia pre C++, Visual C++ .NET 2002 alebo v Visual C++ .NET 2003. Využíva nové C + +/ CLI syntaxe, ktorý bol zavedený v Visual C ++ 2005 a nové msclr namespace kód, ktorý bol predstavený v C ++ 2008 Visaul. Úspešne zostaviť tento kód, musíte použiť Microsoft Visual C ++ 2008 /clr C ++ kompilátor prepínač.

Riadené rozšírenia pre vzorového kódu C++ (Visual C++ 2002 alebo 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 ukážkový kód (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

Pre ostatné top-hit Visual C++ .NET Microsoft Knowledge Base články, navštívte nasledovnú webovú lokalitu spoločnosti Microsoft:
http://support.Microsoft.com/default.aspx?xmlid=FH%3BEN-US%3Bvcnet

Vlastnosti

ID článku: 311259 - Posledná kontrola: 30. mája 2013 - Revízia: 3.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 311259

Odošlite odozvu

 

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