Шаг 215.
Microsoft Visual C++ 2010. Язык С/С++. Преобразование между регулируемыми и нерегулируемыми... . Пример 4. Преобразование строки wchar_t в строку String^

    На этом шаге мы приведем программу, реализующую указанное преобразование.

    Это преобразование - обратное приведенному в примере 3 предыдущего шага. Преобразование, которое мы рассматриваем, фактически переводит native Юникод-строку в состояние managed. А в этом состоянии со строкой уже можно работать, применяя managed-указатель ^.

    Текст программы приведен ниже, а результат - на рисунке 1.

// 215_1.cpp: главный файл проекта.

#include "stdafx.h"

#include <stdio.h> 
#include <conio.h>

using namespace System;
using namespace System::Runtime::InteropServices;
#pragma managed
void ManagedStringFunc(wchar_t* s)
{
	String^ ms = Marshal::PtrToStringUni( (IntPtr)s ); 
	// копирует native-символы строки s в Юникоде в 
	// native-кучу, преобразовывая их в managed-строку 
	// и выдает managed-указатель на место расположения 
	// строки.
	// Аргумент метода по его определению должен иметь 
	// тип IntPtr (внутренний указатель), поэтому s 
	// преобразуется к этому типу. 
	Console::WriteLine("(managed) recieved '{0}'", ms);
}

#pragma unmanaged
void NativeProvidesAString() {
	printf("(unmanaged) calling managed func...\n"); 
	ManagedStringFunc (L"test string");
}
 
#pragma managed

void main()
{
    NativeProvidesAString();
    _getch();
}
Архив проекта можно взять здесь.


Рис.1. Результат преобразования wchar_t в String^

    На следующем шаге мы рассмотрим маршаллинг native-структуры.




Предыдущий шаг Содержание Следующий шаг