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

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

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

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

#include "stdafx.h"

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

using namespace System;
using namespace System::Runtime::InteropServices;

#pragma managed
void ManagedStringFunc(char* s) 
// здесь managed-функция получает native-аргумент
{
	String^ ms = Marshal::PtrToStringAnsi(static_cast<IntPtr>(s));
	// метод PtrToStringAnsi() копирует native-строку s в 
	// managed-пространство, преобразуя каждый символ ASCII в Юникод, 
	// и выдает указатель на месторасположение новой строки в 
	// переменную s, которая преобразуется в тип IntPtr. 
	// Затем этот тип преобразуется оператором static_cast 
	// в тип String^

	Console::WriteLine("(managed): received '{0}'", ms);
}

#pragma unmanaged
void NativeProvidesAString()  
//это native-функция, которая вызывает
//managed-функцию
{
	printf("(native) calling managed func..\n"); 
	ManagedStringFunc("test string");
}
 
#pragma managed 
int main()
//это managеd-функцин, которая вызывает native-функцию
{
	NativeProvidesAString(); 
	_getch();
}
Архив проекта можно взять здесь.


Рис.1. Результат перевода managed-строки в native-строку

    На следующем шаге мы приведем пример программы, выполняющей преобразование String^ строки в строку wchar_t.




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