Шаг 217.
Microsoft Visual C++ 2010. Язык С/С++. Преобразование... . Пример 6. Работа с массивом элементов native-структуры в managed-функции

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

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

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

#include "stdafx.h"
#include <stdio.h> 

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

// unmanaged struct 
struct ListStruct
{
	int count; 
	double* item;
};
#pragma unmanaged
void UnmanagedTakesListStruct(ListStruct list)
{
	printf_s("[unmanaged] count = %d\n", list.count); 
	for (int i = 0; i < list.count; i++)
		printf_s("array[%d] = %.2f\n", i, list.item[i]);
}
#pragma managed

void main()
{
	ListStruct list; 
	list.count = 10; 
	list.item = new double[list.count];
	// оператор >new размещает объект в native-куче
	// и возвращает указатель на этот объект.
	// В данном случае в куче формируется одномерный 
	// массив из list.count элементов.

	Console::WriteLine("[managed] count = {0}", list.count); 
	// создается указатель на объект, формирующий 
	// случайные числа: 
	Random^ r = gcnew Random(0);

	// инициализация массива list.item[] случайными 
	// числами из интервала [0,1], умноженными на 100
	for (int i = 0; i < list.count; i++)
	{
		list.item[i] = r->NextDouble() * 100.0;
		Console::WriteLine("array[{0}] = {1}", i, list.item[i]);
	}
	// вызов native-функции в managed-функции 
	UnmanagedTakesListStruct(list); 
	Console::ReadLine();
}
Архив проекта можно взять здесь.


Рис.1. Результат работы с массивом элементов native-структуры в managed-функции

    На следующем шаге мы рассмотрим доступ к символам в классе System::String.




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