Поделиться через


Использование неуправляемых функций DLL

Вызов платформы — это служба, которая позволяет управляемому коду вызывать неуправляемые функции, реализованные в библиотеках динамических ссылок (DLL), например в API Windows. Он находит и вызывает экспортированную функцию и маршалирует свои аргументы (целые числа, строки, массивы, структуры и т. д.) через границу взаимодействия по мере необходимости.

В этом разделе приводятся задачи, связанные с использованием неуправляемых функций DLL и содержатся дополнительные сведения о вызове платформы. В дополнение к следующим задачам существуют общие рекомендации и ссылка, предоставляющая дополнительные сведения и примеры.

Для использования экспортированных функций DLL

  1. Определение функций в библиотеках DLL.

    Минимально необходимо указать имя функции и имя библиотеки DLL, содержащей ее.

  2. Создайте класс для хранения функций DLL.

    Можно использовать существующий класс, создать отдельный класс для каждой неуправляемой функции или создать один класс, содержащий набор связанных неуправляемых функций.

  3. Создание прототипов в управляемом коде.

    [Visual Basic] Используйте инструкцию Declare с ключевыми словами Function и Lib . В некоторых редких случаях можно использовать DllImportAttribute с ключевыми словами Shared Function. Эти случаи описаны далее в этом разделе.

    [C#] Используйте dllImportAttribute для идентификации библиотеки DLL и функции. Пометьте метод модификаторами static и extern.

    [C++] Используйте dllImportAttribute для идентификации библиотеки DLL и функции. Пометьте метод или функцию-оболочку с использованием extern "C".

  4. Вызов функции DLL.

    Вызовите метод в управляемом классе, как и любой другой управляемый метод. Передача структур и реализация функций обратного вызова являются особыми случаями.

Примеры, демонстрирующие, как создавать объявления на основе .NET для использования с вызовом платформы, см. в разделе «Маршаллирование данных с помощью вызова платформы».

Более подробный взгляд на вызов функций платформы

Вызов платформы (Platform Invoke) использует метаданные для поиска экспортированных функций и маршалирования их аргументов во время исполнения. На следующем рисунке показан этот процесс.

Схема, показывающая вызов платформы.

Когда механизм платформы вызывает неуправляемую функцию, он выполняет следующую последовательность действий:

  1. Находит библиотеку DLL, содержащую функцию.

  2. Загружает библиотеку DLL в память.

  3. Находит адрес функции в памяти и отправляет его аргументы в стек, упаковывая данные по мере необходимости.

    Замечание

    Поиск и загрузка библиотеки DLL и поиск адреса функции в памяти происходят только при первом вызове функции.

  4. Передает управление неуправляемой функции.

Вызов платформы создает исключения, созданные неуправляемой функцией для управляемого вызывающего объекта.

См. также