Введение
Управляемые расширения для C++
Так называется множество расширений языка C++. Они были введены с целью помочь разрабатывать приложения, ориентированные на платформу Microsoft .Net. Традиционный (unmanaged) код C++ и управляемый код (managed) могут одновременно присутствовать в одном приложении, не мешая друг другу. Для того чтобы получить быстрое представление об этой технологии, рассмотрим пример.
Вы начинаете со стартовой заготовки Visual C++ Projects, скроенной по шаблону Managed C++ Application, задав имя проекту (например, Man), и получаете два СРР-файла: Man.срр и Assemblylnfo.cpp. Первый файл представляет собой заготовку вашей программы консольного типа:
//=== Импортирует метаданные в программу, использующую //=== Managed Extensions for C++ #using <mscorlib.dll> // Стало доступным пространство имен System, которое // содержит описания фундаментальных классов, атрибутов, // интерфейсов и событий using namespace System; int main (void) { // Console – это класс, который обеспечивает стандартные // операции ввода-вывода в окно консольного типа Console::WriteLine("Hello World"); return 0; }
Второй файл содержит атрибуты настройки сборочной информации (assembly metadata). Коды этого файла нет смысла рассматривать, так как они носят сугубо служебный характер. Вы можете запустить программу на выполнение (CTRL + F5) и увидеть традиционное приветствие в окне консольного типа. Теперь покажем, как можно создать управляемый динамический массив. Вставьте директиву finclude <stdlib.h> и отредактируйте код главной функции:
void main() { // Описатель _gс декларирует garbage-collected object, // то есть объект, за памятью которого будет следить CLR int managed _gc[] = new int _gc[rand()%100 + 1); //==== Обычный динамический массив int *unmanaged = new int[rand()%100 + 1]; //==== Мы можем задавать вопросы объекту managed Console::WriteLine (managed › Count); Console::WriteLine (managed › Rank); //==== Мы не можем задавать вопросы объекту unmanaged }
Запустите проект и убедитесь в том, что в окне выведены два числа, 42 и 1. Первое число является случайно выбранным размером массива (managed), а второе – рангом массива, то есть его размерностью (одномерный массив). Для того чтобы чуть-чуть глубже проникнуть в тайны управляемого кода и данных, дополните тестовую программу кодами нового управляемого класса Man. Вставьте следующие коды до функции main.