Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

Váš prehliadač nie je podporovaný

Ak chcete lokalitu používať, aktualizujte svoj prehliadač.

Aktualizovať na najnovšiu verziu Internet Explorera

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

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
Tento článok sa vzťahuje na nasledujúce Microsoft knižnica tried .NET Framework názvov:
  • System::Runtime::InteropServices
  • Msclr::Interop
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):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:
kbVC700

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 311259 – Posledná kontrola: 05/30/2013 08:31:00 – Revízia: 3.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 KbMtsk
Pripomienky
col) + "//c.microsoft.com/ms.js'><\/script>");