Töötate praegu ühenduseta, ootame Interneti-ühenduse taasloomist

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

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
Käesolevas artiklis viidatakse järgmiselt Microsoft .NET raamistiku klassi Raamatukogu nimeruume:
  • System::Runtime::InteropServices
  • Msclr::interop
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: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:
kbVC700

Hoiatus. See artikkel on masintõlgitud.

Atribuudid

Artikli ID: 311259 – viimati läbi vaadatud: 06/07/2013 02:26:00 – redaktsioon: 1.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 KbMtet
Tagasiside
=">