Managed C++. Заметка первая

Автор заметки: vverdna

Заметка ориентированна на людей знакомых с Visual C++ и в общех чертах понимающих принципы .Net.

Насколько мне понимается основное назначение Managed C++ — это интеграция старого кода(или нового но более быстрого) unmanaged кода с новым managed кодом. Огромный плюс Managed C++ перед всеми остальными языками работающими с .Net это гибкая и очень простая работа с unmanaged кодом, а следовательно и указателями и MFC библиотекой и огромным количеством других библиотек. Собственно Managed C++ это обычный С++ проект с подключенными классами .Net и несколькими дополнительными ключевыми словами для работы с ними. В данной заметке я буду рассматривать Visual Studio 2005 это следует учесть потому как в 2003 студии все несколько иначе Microsoft очень многое изменил в том числе и ключевые слова. Рассматривать Managed C++ будем на примере упрощенного рабочего задания т.е берем задание которое я когда-то получил на работе убираем лишнюю рутину и пытаемся это реализовать. Суть задания имеем библиотеку с неким классом на C++ требуется сделать к нему интерфейс чтоб его можно было использовать в C#.

На входе: lib. На выходе: dll которая интегрируется в С# и там используется dll написанна на Managed C++.

Базовые знания по Managed C++:

 


#
pragma managed – директива препроцессора подсказывающая компиллятору что дальше будет managed код. Обычно с этой директивы начинаются managed .h файлы.

#pragma unmanaged – директива препроцессора подсказывающая компиллятору что дальше будет unmanaged код.

*using namespace xxx –расширение области видимости. Пример : using namespace System – видим базовые классы такие как String итд

*namespace xxx {} – область видимости xxx.

ref – ключевое слово используется перед описанием класса для обозначения того что класс managed и передается по ссылке.

value — – ключевое слово используется перед описанием класса для обозначения того что класс managed и передается по значению.

^ — managed указатель(аналог * в unmanaged).

gcnew – new для managed.

*Тоже самое было в “старом” C++ но использовалось реже.


Этого достаточно для создания простого класса остальную информацию можно найти в мсдн ссылка: http://msdn2.microsoft.com/en-us/library/xey702bw(VS.80).aspx

 

1. Теперь создаем проект динамической библиотеки: New Project->Win32->Win32 Console Application и в визарде ставим галочку на Application Settings->Dll. И на использование MFC library.

2. После создания проекта заходим в Project->xxx properties и в первом окне меняем след параметры:

Character Set -> Use Multi-Byte Character Set

Common Language Runtime support -> Common Language Runtime Support

 

—————————————

Далее создаем новый класс и оформляем .h файл следующим образом

В самое начало ставим #pragma managed

Далее using namespace System

И открываем свою область имен т.е namespace xxx {} в фигурных скобках должен находиться наш класс. Перед классом ставим public ref. Должно получиться что-то вроде:

И в cpp файл все ф-ции прячем в namespace xxx получится чтот типа такого:

Собственно и все для первого раза. Уже сейчас в данном классе можно использовать MFC и Managed код. В одной и той же ф-ции. Вот пример:

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.