Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 227

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 221 222 223 224 225 226 < 227 > 228 229 230 231 232 233 .. 320 >> Следующая

При создании сборок в .NET-совместимом компиляторе наш конечный продукт -это «управляемый код» (managed code), который предназначен для выполнения в среде CLR (Common Language Runtime). Управляемый код имеет ряд преимуществ по сравнению с традиционным двоичным кодом, таких как автоматическое управление памятью, единая система типов, самодокументирование сборок и т. п. Для сборок .NETпредусмотрена специфическая и очень четкая внутренняя структура: помимо самих инструкций на языке IL (Intermediate Language, промежуточный язык) и метаданных типов, сборки содержат также манифест, в котором огн -
Главные вопросы совместимости
564 Глава 12 • Взаимодействие с унаследованным программным кодом
сываются все внутренние типы этой сборки и фиксируются все необходимые внешние сборки.
Очень часто сборки ,NET должны успешно работать в мире сложных приложений, где значительную часть кода составляют классические СОМ-серверы. Код СОМ-серверов похож на код сборок ,NET разве что расширениями имен файлов. Естественно, код модулей СОМ - двоичный, платформенно-зависимый (в отличие от полностью платформенно-независимого кода IL). СОМ-серверы работают с уникальным набором типов данных (B5TR, VARIANT и т. п.), содержание которых в разных языках программирования сильно различается. Помимо того что в каждом программном модуле СОМ должны быть реализованы достаточно сложные .элементы (такие как фабрики классов, код IDL, записи в реестр), следует учитывать, что в мире СОМ необходимо отслеживать каждую ссылку на объект. Если мы ошибемся в ссылках, то это вполне может привести к таким неприятным последствиям, как утечка памяти.
В общем, между типами .NET и СОМ так мало общего, что трудно даже представить, как такие разные типы могут успешно взаимодействовать друг с другом. Однако, конечно же, в реальной работе возникает очень много ситуаций, когда необходимо обеспечить такое взаимодействие. Платформа .NET поддерживает следующие виды совместимости с унаследованным кодом:
• вызовы из типов .N ET напрямую к модулям DLL, созданным на С (то есть обращения к Win32 API или пользовательским модулям DLL);
• вызовы из типов.NET к типам СОМ;
• вызовы из типов СОМ к типам.N ET;
• вызовы из типов .NET к службам СОМ.
мы увидим далее этой главе, в состав SDK входит множество средств, которые позволяют мост» между и остальными архитектурами.
Кроме того, в библиотеке базовых классов .N ET также предусмотрено немало типов, которые предназначены исключительно для организации взаимодействия с унаследованным кодом.
Пространство имен
System. Runtime. InteropServices
При использовании служб для взаимодействия с унаследованным кодом мы будем явно или опосредованно работать с типами, определенными в пространстве имен Systera.Runtime. InteropServices, Наиболее важные типы этого пространства имен представлены в табл. 12.1.
Все перечисленные в табл. 12.1 типы — это атрибуты, которые используются для управления процессами передачи данных от типов .NET типам СОМ (и наоборот). Конечно, в пространстве имен System.Runtime. InteropServices определено также множество интерфейсов, перечислений и структур. Но мы будем рассматривать их не списком, а в момент их применения. Первое, с чего мы начнем, — с Platform Invocation Services (PInvoke).
Взаимодействие с модулями DLL, созданными на С 565
Таблица 12.1. Некоторые типы пространства имен System,Runtime.InteropServices
Тип
Описание
Class! nterfaceAttri bute
Com RegisterFu nctJonAttri bute ComUnregistreFunctionAttri bote
ComSourceI nterfacesAttri bute
DispIdAttribute
DIIImportAttribute
GuidAttribute
IDispatchlmplAttribute
InterfaceTypeAttribute
OutArtribute InAttribute
ProgldAttribute
Используется для управления как тип .NET будет представлять свои открытые члены клиентам СОМ
Могут быть связаны с пользовательскими методами. Определяют, что этот метод должен быть вызван при регистрации (или удалении регистрации) сборки для использования в среде СОМ
Определяет список интерфейсов, которые являются источниками событий для класса
Пользовательский атрибут. определяющий COM DISPID метола,
открытой переменной или свойства
Используется PInvoke (Platform Invocation Services - службами
активизации платформ)
Используется для определения GUID для класса, интерфейса
или библиотеки типов
Определяет, какую реализацию IDispatch должна использовать среда CLR при обнаружении двойных интерфейсов
Определяет, как именно интерфейс будет открыт
для клиентов СОМ (в качестве производного от IDispatch или производного от IUnknown)
Используется для параметра или поля. Определяет, в каком
направлении должны быть переданы данные — от вызываемого к вызывающему или от вызывающего к вызываемому
Пользовательский атрибут, который позволяет задавать ProgID для типа .NET
Взаимодействие с модулями DLL, созданными на С
Службы активизации платформ (Platform Invocation Services, PInvoke) обеспечивают возможность вызывать из кода .NETфункции, реализованные в традицион-ныхдвоичныхмодулях DLL, написанных на С (не в СОМ-серверах). При помощи PInvoke программист .N ET избавляется от массы проблем, связанных с реализаци -ей вызова функций и экспорта возвращаемых ими данных вручную. PInvoke передает также параметры при вызове функций, транслируя типы данных ,NET в их аналоги в традиционном двоичном коде.
Предыдущая << 1 .. 221 222 223 224 225 226 < 227 > 228 229 230 231 232 233 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100