- •Работа с неуправляемым кодом
- •Управляемый и неуправляемый код
- •Службы Platform Invoke
- •Службы com Interoperability
- •Обзор механизма преобразования
- •Работа службы Platform Invoke. Запуск функций WinApi
- •Управляемая библиотека
- •Управляемая библиотека в управляемом коде
- •Управляемая библиотека в неуправляемом коде
- •Вызов неуправляемых функций из управляемого модуля
- •Идентификация вызываемой функции
- •Создание класса для размещения библиотечной функции
- •Прототипы в управляемом коде
- •Небезопасный код
- •Григорьев с. .Net и работа с неуправляемым кодом. Часть 1 / с. Григорьев [Электронный ресурс] : http://habrahabr.Ru/blogs/net/84076/
Министерство образования Республики Беларусь
Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»
Факультет непрерывного и дистанционного обучения
Кафедра программного обеспечения информационных технологий
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к контрольной работе № 1
по курсу «Операционные системы и системное программирование. Часть 3»
Студент: гр. 801021 Коноплёв А.П.
Руководитель: Прохорчик Р.В.
Минск 2011
Содержание
Работа с неуправляемым кодом………………………………………………….…3
1. Управляемый и неуправляемый код……………………………………………3
2. Службы Platform Invoke…………………………………………………………5
2.1. Службы COM Interoperability………………………………………………5
2.2. Обзор механизма преобразования………………………………………….6
2.3. Работа службы Platform Invoke. Запуск функций WinAPI……………….7
3. C++ .NET. Совмещение управляемого и неуправляемого кодов……………10
3.1. Управляемая библиотека…………………………………………………..13
3.2. Управляемая библиотека в управляемом коде……………………………14
3.3. Управляемая библиотека в неуправляемом коде…………………………15
3.4. Вызов неуправляемых функций из управляемого модуля………………15
3.5. Идентификация вызываемой функции……………………………………16
3.6. Создание класса для размещения библиотечной функции………………17
3.7. Прототипы в управляемом коде……………………………………………17
4. Небезопасный код………………………………………………………………19
Список использованных источников……………………………………….……..23
Работа с неуправляемым кодом
Управляемый и неуправляемый код
Управляемый код (англ. managed code) — термин, введённый Microsoft для обозначения кода программы, исполняемой виртуальной машиной .NET под управлением CLR.
С формальной точки зрения управляемым кодом является любой программный код, исполняемый в среде отладчика.
Неуправляемый код (англ. unmanaged code) — обычный машинный код, программный код, выполняющийся вне среды выполнения CLR.
Слово управляемый здесь относится к методу обмена информацией между программой и исполняющей средой. Оно означает, что в любой точке исполнения управляющая среда может приостановить исполнение и получить информацию, специфичную для текущего состояния.
Необходимая для этого информация представлена в управляемом коде на языке Intermediate Language и в связанных с этим кодом метаданных.
CIL (англ. Common Intermediate Language) — промежуточный язык, разработанный фирмой Microsoft для платформы .NET Framework.
CLR (англ. Common Language Runtime) — общая среда выполнения языков .NET.
Результатом проекта, написанного на C# и скомпилированного в Visual Studio 2008, является сборка (assembly), которая содержит IL-код (Intermediate Language код) проекта и манифест, полностью описывающий сборку. Сборка может быть создана на одном компьютере, на одной платформе, а выполняться на другом компьютере с другим типом процессора, с другой операционной системой. Для выполнения сборки необходимо и достаточно установки на целевом компьютере соответствующей версии Framework .Net, представляющего надстройку над операционной системой.
Когда мы говорим о сборках, язык программирования, на котором создавался исходный код, уже не имеет значения, его особенности никак не отражаются в сборке. Сборки, созданные на VB или C++ с управляемыми расширениями, неотличимы от сборок, которые созданы на C# или других языках, включенных в состав Visual Studio 2008 и использующих каркас Framework .Net при компиляции управляемого кода.
С другой стороны, понятно, что в состав Visual Studio 2008 могут включаться языки, не применяющие Framework .Net, не создающие сборки с управляемым кодом, а использующие собственные библиотеки и собственные каркасы приложений (Framework Applications). В частности, на языке С++ в рамках Visual Studio 2008 можно писать проекты, работающие с библиотеками MFC и ATL, ориентированные исключительно на С++ и создающие в результате компиляции проекта обычные exe-файлы.
Сегодня на всех компьютерах, работающих под управлением любой из версий Windows, установлена соответствующая версия Framework .Net, так что на таких компьютерах могут выполняться и сборки, и обычные exe-файлы. Поскольку Framework .Net, так же как и C#, стандартизован и является свободно распространяемым программным продуктом, его можно встретить и на тех компьютерах, где нет Windows.
На рис. 1 показана схема функционирования компьютера, позволяющего выполнять как сборки - управляемый код, так и обычные exe-файлы - неуправляемый код.
Рис. 1. Управляемый и неуправляемый код
Следует заметить, что два типа программ, выполняемые по-разному, могут взаимодействовать друг с другом - из управляемого кода возможен вызов программ с неуправляемым кодом и наоборот. В проектах, написанных на C#, можно управлять офисными приложениями - документами Word и Excel. Офисные документы - это COM-объекты, принадлежащие миру неуправляемого кода, а проекты C# - это сборки, относящиеся к миру с управляемым кодом.
Примеры неуправляемого программного кода, вызываемого из управляемых C# приложений:
функции Win32 API;
функции DLL-библиотек;
компоненты COM;
интерфейсы Microsoft ActiveX.
Microsoft .NET Framework позволяет взаимодействовать с COM-компонентами, COM+-службами, внешними типами библиотек и разными службами операционной системы. Перехват исключений различается в управляемом и неуправляемом коде. Платформа .NET Framework предлагает две службы взаимодействия управляемого кода с неуправляемым — Platform Invoke и COM interoperability, которые используют реальные возможности проекта.