Як конвертувати від System::String * символ * в Visual C++

Переклади статей Переклади статей
Номер статті: 311259 - Показ продуктів, яких стосується ця стаття.
Ця стаття відноситься до таких Microsoft .NET Framework клас бібліотечного простору імен:
  • System::Runtime::InteropServices
  • Msclr::interop
Розгорнути все | Згорнути все

На цій сторінці

Підсумки

У цій статті розглянуто кілька способів перетворити з System::String * char * за допомогою таких дій:
  • Керовані розширення для C++ у Microsoft Visual C++ .NET 2002 і в Microsoft Visual C++ .NET 2003
  • C + + / CLI у Microsoft Visual C++ 2005 та в Microsoft Visual c + + 2008

Спосіб 1

PtrToStringChars дає вам інтер'єру вказівник на справжній об'єкт рядок. Якщо ви передати цей вказівник на виклик некеровані функції, ви повинні спочатку закріпити вказівник щоб гарантувати, що об'єкт не переміщуються під Вільний час асинхронного сміття процес збору:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

Спосіб 2

StringToHGlobalAnsi копіювання вмісту керованих рядок об'єкта, до власної динамічної пам'яті а потім перетворює його в американських національних стандартів інститут (ANSI) формат на льоту. Цей метод виділення необхідних власної динамічної пам'яті пам'яті:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Примітка. У 2005 році Visual C++ і Visual c + + 2008 необхідно додати спільної мови виконавчі файли підтримки компілятор параметр (/ clr:oldSyntax) успішно скомпілювати попередній зразок коду. Додати загальні виконавчі мови підтримки компілятор параметр, виконайте такі дії:
  1. Натисніть кнопку Проекта потім натисніть кнопку Назва проекту Властивості.

    Примітка.Назва проекту Це покажчик місця заповнення для назви проекту.
  2. деталізувати Настроювання властивостейа потім натисніть кнопку Загальні.
  3. В області праворуч клацніть, щоб вибрати Загальні виконавчі файли підтримки мови, старий синтаксис (/ clr:oldSyntax) у в Загальні виконавчі мови підтримка Параметри проекту.
  4. Натисніть кнопку Застосуватиа потім натисніть кнопку Гаразд.
Щоб отримати додаткові відомості про поширені мови під Вільний час виконання варіанти підтримки компілятор відвідайте веб-сайт корпорації Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/EN-US/Library/k8d11d4s.aspx
Ці кроки застосовуються до всієї статті.

Метод 3

Клас VC7 CString має конструктор, що приймає керованих вказівника рядку і вантажі CString з його зміст:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Метод 4

Visual c + + 2008 вводить на marshal_as<T> </T> маршал довідки класу і класу модуля підтримки маршал 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;
Примітка. Цей код не скласти за допомогою керованого розширень для C++ Visual C++ .NET 2002 або Visual C++ .NET 2003. Він використовує нові C + + / CLI синтаксис, який був введений в Visual C++ 2005 і нового msclr простір імен код, який був введений в Visaul c + + 2008. Успішно скласти цей код, потрібно використовувати перемикач компілятор /clr C++ у Microsoft Visual c + + 2008.

Керовані розширення для C++ приклади коду (Visual C++ 2002 або 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 приклади коду (2005 року Visual C++ і 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;
}

Посилання

Для інших Топ хіт Visual C++ .NET див. статті, відвідайте такий веб-сайт корпорації Майкрософт:
http://support.Microsoft.com/default.aspx?xmlid=FH%3BEN-US%3Bvcnet

Властивості

Номер статті: 311259 - Востаннє переглянуто: 30 травня 2013 р. - Редакція: 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 KbMtuk
Машинний переклад
УВАГА! Цю статтю переклала програма машинного перекладу Microsoft, а не людина. Корпорація Microsoft пропонує вам як машинні переклади, так і переклади фахівців, щоб Ви мали доступ до всіх статей бази знань рідною мовою. Проте стаття, яку переклав комп’ютер, не завжди бездоганна. Вона може містити лексичні, синтаксичні або граматичні помилки. Так само помиляється іноземець, спілкуючись вашою рідною мовою. Корпорація Microsoft не несе відповідальність за жодні неточності, помилки або шкоду, завдану неправильним перекладом змісту або його використанням з боку користувачів. Крім того, корпорація Microsoft часто оновлює програму машинного перекладу.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 311259

Надіслати відгук

 

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