Принципы объектно-ориентированного программирования




ГЛАВА 17 Взаимодействие с неуправляемым кодом


    ГЛАВА 17 Взаимодействие с неуправляемым кодом
    ГЛАВА 17 Взаимодействие с неуправляемым кодом Platform Invocation Services Объявление экспортированной функции DLL Использование функций обратного вызова на С# Преобразование и PInvoke Написание н...
    Platform Invocation Services
    Platform Invocation Services позволяют коду .NET обращаться к функциям, структурам и даже к обратным вызовам в существующих неуправляемых библиотеках DLL;...
    небезопасный код (unsafe code)
    небезопасный код (unsafe code) позволяет С# -программисту использовать в приложениях такие конструкции, как указатели, отдавая управление этим кодом на откуп исполняющей среде .NET;...
    взаимодействие с COM (COM interoperability)
    взаимодействие с COM (COM interoperability) под этим понимается способность кода .NET применять компоненты СОМ, а приложений СОМ — компоненты .NET....
    Platform Invocation Services
    Platform Invocation Services Службы Platform Invocation Services .NET (или PInvoke) позволяют управляемому коду работать с функциями и структурами, экспортированными из DLL. В этом разделе мы увид...
    Примечание
    Примечание Вы можете создавать DLL с помощью С# и других компиляторов .NET. Я не употребляю термин неуправляемая Win32 DLL — такую DLL я называю просто DLL....
    Объявление экспортированной функции DLL
    Объявление экспортированной функции DLL Во-первых, мы рассмотрим объявление на С# простой функции из DLL. Мы используем пример, который для .NET PInvoke быстро становится каноническим, — Win32 Mes...
    Использование функций обратного вызова на С#
    Использование функций обратного вызова на С# Не только функции DLL могут быть вызваны приложениями на С#, но и сами функции DLL могут также вызывать определенные методы С# из вашего приложения в с...
    Преобразование и Plnvoke
    Преобразование и Plnvoke Хотя вы, как правило, не замечаете преобразования и не определяете его работу, каждый раз при вызове функции DLL .NET должен преобразовать параметры для этой функции и воз...
    Написание небезопасного кода
    Написание небезопасного кода При переходе с C++ на С# некоторые беспокоятся, останется ли у них полный контроль над памятью, когда это необходимо, — эта пробле-'ма связана с небезопасным кодом (un...
    Использование указателей в С#
    Использование указателей в С# Рассмотрим некоторые правила, которые относятся к использованию указателей и небезопасного кода на С#. Затем мы погрузимся в изучение примеров. Указатели можно получи...
    Операторы для работы с указателями C/C++.
    Табл. 17-1. Операторы для работы с указателями C/C++. Оператор Описание Оператор адрес (address-of) возвращает указатель, представляющий * ...
    Оператор fixed
    Оператор fixed Синтаксис оператора fixed таков: fixed (тип* указатель = выражение) оператор Как сказано выше, этот оператор говорит GC, чтобы тот не трогал заданную переменную. Заметьте: тип — это...
    Примечание
    Примечание Компилятор С# не ограничивает доступ к фиксированной переменной областью видимости небезопасного кода. Например, вы можете использовать фиксированную переменную как г- value для /-value...
    Взаимодействие с СОМ
    Взаимодействие с СОМ Вас, конечно, интересует, как те СОМ-компоненты, что вы написали за долгие годы, работают с .NET. Что ж, я покажу, как компоненты классической СОМ (да-а-а... больно слышать, ч...
    О, дивный новый мир!
    О, дивный новый мир! Как вы могли убедиться, среда .NET и язык С# вместе представляют собой мощные средства создания компонентных систем. Но как быть с тоннами СОМ-компонентов многократного исполь...
    Приступим к делу
    Приступим к делу Поскольку слой взаимодействия с СОМ поначалу может несколько ошеломить, давайте на минуту забудем обо всех формальных определениях j и перейдем к реальному примеру, иллюстрирующем...
    Генерация метаданных из библиотеки типов СОМ
    Генерация метаданных из библиотеки типов СОМ Приложение .NET, которому требуется взаимодействие с нашим компонентом СОМ, не может непосредственно воспользоваться функциональностью этого компонента...
    ILDASM - замечательный инструмент просмотра метаданных и MSIL управляемых сборок.
    ILDASM - замечательный инструмент просмотра метаданных и MSIL управляемых сборок....
    Раннее связывание с компонентами СОМ
    Раннее связывание с компонентами СОМ Теперь, сгенерировав метаданные для .NET-клиента, попытаемся вызвать метод GetAirlineTiming нашего объекта СОМ из .NET-клиента. Вот клиентское приложение, напи...
    Использование динамического определения типов для выбора интерфейсов СОМ
    Использование динамического определения типов для выбора интерфейсов СОМ Как же работает классический сценарий Query Interface с точки зрения .NET-клиента, которому нужен доступ к другому интерфей...
    Позднее связывание с компонентами COM
    Позднее связывание с компонентами COM Оба приложения — AirlineClientlApp и AirlineClient2App — используют метаданные RCW для раннего связывания .NET-клиента с объектом СОМ. Хотя раннее связывание...
    Модели потоков в COM
    Модели потоков в COM В начале программирования в СОМ большинство людей мало знает (или не знают вообще) о моделях потоков и окружений в СОМ. Не набравшись опыта, они не понимают, что за модель сво...
    Подведем итоги
    Подведем итоги Последнее, о чем я хочу сказать, это как различные механизмы работы с унаследованным кодом (PInvoke, небезопасный код и COM Interop) вписываются в общую схему .NET. В этой главе вы...








Начало