Kuidas teisendada System::String * Char * Visual c ++

Artiklite tõlked Artiklite tõlked
Artikli ID: 311259 - Vaadake tooteid, millega see artikkel seostub.
Käesolevas artiklis viidatakse järgmiselt Microsoft .NET raamistiku klassi Raamatukogu nimeruume:
  • System::Runtime::InteropServices
  • Msclr::interop
Laienda kõik | Ahenda kõik

Sellel veebilehel

Kokkuvõte

Selles artiklis kirjeldatakse mitmeid viise, kuidas teisendada System::String * char * kasutades järgmist:
  • Microsoft Visual C++ .NET 2002 ja Microsoft Visual C++ .NET 2003 c++ hallatavad laiendused
  • C + +/ CLI Microsoft Visual C ++ 2005 ja Microsoft Visual C++ 2008

1. Meetodi

PtrToStringChars annab teile interjööri kursori String objekti. Kui te Andke see kursor haldamata funktsioonikutse, tuleb esmalt kinnitada kursor tagamaks, et objekt ei liigu ajal asünkroonne prügi kogumise protsessi:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

2. Meetod

StringToHGlobalAnsi kopeerib sisu hallatava String-objektis kohaliku kuhja, ja seejärel teisendada see arvesse Ameerika riiklik standardite Instituut (ANSI) formaadis lennult. See meetod eraldab vajalik kohaliku kuhja mälu:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Märkus Visual C ++ 2005 ja Visual C ++ 2008, peate lisama ühise keele runtime tugi kompilaator variant (/ clr:oldSyntax) eelmise koodi proov edukalt koostada. Ühise keele runtime tugi kompilaator võimalus lisamiseks toimige järgmiselt.
  1. Klõpsake nuppu Projekti, ja seejärel klõpsake nuppu ProjectName Atribuudid.

    MärkusProjectName on projekti nime kohatäide.
  2. Laienda Konfiguratsiooni atribuudid, ja seejärel klõpsake nuppu Üldine.
  3. Parempoolsel paanil klõpsake valimiseks Ühise keele Runtime tugi, vana süntaks (/ clr:oldSyntax) aastal ning Levinud keelte käitusaega toetust projekti sätted.
  4. Klõpsake nuppu Rakenda, ja seejärel klõpsake nuppu Ok.
Ühise keele runtime tugi kompilaator suvandite kohta lisateabe saamiseks külastage järgmist Microsofti tootearendajate võrgustiku (MSDN) veebisaiti:
http://msdn2.microsoft.com/en-us/Library/k8d11d4s.aspx
Need juhised kehtivad kogu artiklit.

Meetod 3

VC7 CString klass on ehitaja, mis võtab hallatava String osuti ja lasti CString ja selle sisu:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

4. Meetod

Visual C ++ 2008 tutvustab selle marshal_as<T> </T> marssal abi ja marshal_context() marssal abistaja klassi.
//#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;
Märkus See kood ei kompileerida abil hallatavad laiendused c++, Visual C++ .NET 2002 või Visual C++ .NET 2003. Ta kasutab uus C + +/ CLI süntaks, mis võeti kasutusele uus msclr nimeruumi koodi, mis võeti kasutusele Visaul C ++ 2008 ja Visual C ++ 2005. Edukalt koguda seda koodi, peate kasutama lülitiga /clr C++ kompilaatori Microsoft Visual C ++ 2008.

Hallatavad laiendused C++ proovi kood (Visual C++ 2002 või 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 proovi kood (Visual C ++ 2005 ja 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;
}

Viited

Teiste top-hit Visual C++ .NET Microsofti teabebaasi artiklid, külastage järgmist Microsofti veebisaiti:
http://support.microsoft.com/default.aspx?xmlid=FH%3BEN-US%3Bvcnet

Atribuudid

Artikli ID: 311259 - Viimati läbi vaadatud: 7. juuni 2013 - Redaktsioon: 1.0
Kehtib järgmise lõigu kohta:
  • 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
Märksõnad: 
kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMtet
Masintõlgitud
NB! Artikkel on tõlgitud Microsofti masintõlketarkvaraga ja seda saab parandada Kogukonnapõhise tõlkeraamistiku (CTF) tehnoloogiaga. Microsoft pakub masintõlgitud, kogukonna järeltöödeldud ja inimtõlgitud artikleid, et anda mitmekeelne juurdepääs kõigile meie teabebaasi artiklitele. Masintõlgitud ja järeltöödeldud artiklites võib olla sõnavara-, süntaksi- ja/või grammatikavigu. Microsoft ei vastuta mingite ebatäpsuste, tõrgete ega kahjude eest, mis on tulenenud sisu valest tõlkest või selle kasutamisest meie klientide poolt. Lisateavet CTF-i kohta leiate aadressilt http://support.microsoft.com/gp/machine-translation-corrections/et.
Artikli ingliskeelse versiooni kuvamiseks klõpsake siin: 311259

Andke tagasisidet

 

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