Makale numarası: 311259 - Son Gözden Geçirme: 01 Nisan 2008 Salı - Gözden geçirme: 5.0

System::String * karakteri * Visual C++, dönüştürme

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Bu makalede, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanlarına başvurulmaktadır:
  • System::Runtime::InteropServices
  • Msclr::Interop

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu makalede, System::String * karakter * aşağıdakileri kullanarak dönüştürmek için çeşitli yöntemler açıklanır:
  • Uzantılar, C++, Visual C++ .NET 2002 ve Visual C++ .NET 2003 için yönetilen
  • c + +/ CLI Microsoft Visual C++ 2005 ve Microsoft Visual C++ 2008

Yöntem 1

PtrToStringChars bir iç işaretçisi gerçek dize nesneye verir. Bir yönetilmeyen işlev çağrısı için bu işaretçi geçirirseniz, nesneyi bir zaman uyumsuz bir atık toplama işlemi sırasında hareket emin olmak için işaretçiyi önce iğnesi gerekir:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

Yöntem 2

StringToHGlobalAnsi yerel yığın yönetilen bir dize nesnesinin içeriğini kopyalar ve anında American National Standards ınstitute (ANSI) biçimine dönüştürür. Bu yöntem, gereken yerel yığın bellek ayırır:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Not Visual C++ 2005 ve Visual C++ 2008'de, ortak dil çalışma zamanı desteğini derleyici seçeneği eklemeniz gerekir (/ clr:oldSyntax) başarıyla önceki kod örneğini derlemek için. Ortak dil çalışma zamanı desteğini derleyici seçeneği eklemek için aşağıdaki adımları izleyin:
  1. Project ' i tıklatın ve sonra ProjectName özellikler ' i tıklatın.

    NotProjectName projenin adı için bir yer tutucudur.
  2. Yapılandırma özellikleri ' ni genişletin ve sonra Genel ' i tıklatın.
  3. Sağ bölmede, seçmek için tıklatın ortak dil çalışma zamanı modülü ve Destek, eski sözdizimi (/ clr:oldSyntax)Common Language Runtime desteği proje ayarları.
  4. Uygula ' yı tıklatın ve sonra da Tamam ' ı tıklatın.
Ortak dil çalışma zamanı desteğini derleyici seçenekleri hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)
Bu adımlar, tüm makaleyi için geçerlidir.

Yöntem 3

Yönetilen bir dize işaretçisi alıp içeriğiyle CString yükleyen bir kurucu VC7 CString sınıfı vardır:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Yöntem 4

Visual C++ 2008 marshal_as<t>tanıtır. Yardım sınıfı ve marshal_context() sıralama Yardımcısı class.
//#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;
Not Bu kod C++, Visual C++ .NET 2002 veya Visual C++ .NET 2003 için Yönetilen Uzantılar kullanarak derleme değil. Yeni C + kullandığı +/ Visual C++ 2005 ve Visaul C++ 2008'de kullanılmaya başlanan yeni msclr ad kodunu kullanılmaya başlanan CLI sözdizimi. Başarılı bir şekilde bu kodu derlemek için kullandığınız gerekir / clr Visual C++ 2008 C++ Derleyici anahtarı.

Uzantılar, C++ kodu için (Visual C++ 2002 veya Visual C++ 2003) yönetilen

//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 örnek kod (Visual C++ 2005 ve 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;
}

Referanslar

Diğer için üst-isabet Visual C++ .NET Microsoft Knowledge Base makaleleri, aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-US%3Bvcnet (http://support.microsoft.com/default.aspx?xmlid=fh%3ben-us%3bvcnet)
Visual C++ .NET hakkında daha fazla genel bilgi için aşağıdaki Microsoft Usenet haber grubunu ziyaret edin:
Microsoft.public.dotnet.languages.vc (http://msdn.microsoft.com/newsgroups/default.aspx?query=Microsoft.public.dotnet.languages.vc+&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)

Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbhowtomaster kbmanaged kbnewsgrouplink KB311259 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:311259  (http://support.microsoft.com/kb/311259/en-us/ )