System:: String'i * Char * Visual C++'ta dönüştürme

Makale çevirileri Makale çevirileri
Makale numarası: 311259 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makalede aşağıdaki ifade eder Microsoft .NET Framework sınıf kitaplığı ad:
  • System::Runtime:: InteropServices
  • Msclr::interop
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede System:: String'i * char * aşağıdakileri kullanarak dönüştürmek için birkaç yol açıklamaktadır:
  • Microsoft Visual C++ .NET 2002 ve Visual C++ .NET 2003 Microsoft C++ için Yönetilen Uzantılar
  • C + +/ CLI Microsoft Visual C++ 2005 ve Microsoft Visual C++ 2008

Yöntem 1

PtrToStringChars iç işaretçi gerçek dize nesneye verir. Varsa, Bu işaretçi bir yönetilmeyen işlev çağrısına geçirin, işaretçiyi tutturmak gerekir sırasında zaman uyumsuz bir atık nesne taşınmaz sağlamak için toplama işlemi:
//#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 nesne içeriğini kopyalar. ve bunu içine American National Standards Institute (ANSI) dönüştürür Biçimlendir on the fly. 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ği derleyici seçeneği eklemeniz gerekir (/ clr:oldSyntax) önceki kod örneği başarıyla derlemek için. Ortak dil çalışma zamanı desteği derleyici seçeneği eklemek için şu adımları izleyin:
  1. ' I tıklatın Projeve sonra tıklatın ProjectName Özellikler.

    NotProjectName Projenin adı için yer tutucudur.
  2. Genişlet Yapılandırma özelliklerive sonra tıklatın Genel.
  3. Sağ bölmede, seçmek için tıklatın Ortak dil çalışma zamanı desteği, eski sözdizimi (/ clr:oldSyntax) içinde Ortak dil çalışma zamanı desteği Proje ayarları.
  4. ' I tıklatın Uygulave sonra tıklatın TAMAM.
Ortak dil çalışma zamanı desteği 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
Tam makale için aşağıdaki adımları uygulayın.

Yöntem 3

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

Yöntem 4

Visual C++ 2008 tanıtır marshal_as<T> </T> Yardım ve marshal_context() hazırlama yardımcı sınıfı hazırlamak.
//#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, Visual C++ .NET 2002 veya Visual C++ .NET 2003'te C++ için Yönetilen Uzantılar kullanarak derleme yapmaz. Yeni C + kullandığı +/ CLI sözdizimi Visual C++ 2005 ve Visaul C++ 2008'de kullanılmaya başlanan yeni msclr ad alanı kodu kullanılmaya başlandı. Başarıyla bu kodu derlemek için Microsoft Visual C++ 2008 clr/CLR C++ Derleyici anahtarı kullanmanız gerekir.

Yönetilen Uzantılar C++ kodu için (Visual C++ 2002 veya 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 ö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 üst isabet Visual C++ .NET için Microsoft Bilgi Bankası makaleler, aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-us%3Bvcnet

Özellikler

Makale numarası: 311259 - Last Review: 30 Mayıs 2013 Perşembe - Gözden geçirme: 6.0
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: 
kbhowtomaster kbmanaged kbnewsgrouplink kbmt KB311259 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 311259

Geri Bildirim Ver

 

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