Как быстро импортировать функционал динамической библиотеки в свой проект
Часто перед .NET-программистом возникает задача: использовать функционал динамической библиотеки DLL, написанной другим разработчиком на неуправляемом коде. Подчас функционал этой библиотеки может быть весьма и весьма обширен. Вручную прописывать у себя в проекте каждый класс, функцию, константу и т.д. – очень долго. К счастью, существуют инструменты, частично автоматизирующие этот процесс. Об одном из них мы и поговорим.
Быстрый способ получения PInvoke определений кода C# и VB.NET для динамической библиотеки DLL
Как известно, приложение, написанное для среды .NET, не может напрямую использовать неуправляемый код. Для этого существует специальный механизм, который позволяет вызывать функции неуправляемого кода (unmanaged code) из приложений на управляемом коде (managed code), и называется этот механизм Platform Invocation Service, или PInvoke.
1Установка инструмента PInvoker
Если у вас есть динамическая библиотека *.dll, написанная на неуправляемом коде, например, на языке C или C++, а также её заголовочные (header) файлы, и вам нужно объявить в вашем проекте целую кучу конструкций из библиотеки, то очень хорошим решением для вас может стать инструмент PInvoker. PInvoker свободно распространяется в виде расширения для IDE Visual Studio (поддерживаются версии 2005, 2008 и 2010/2011), а также в виде отдельного приложения.
Работа с ним проста и удобна. PInvoker импортирует PInvoke определения для управляемого кода на C# или VB.NET из файлов заголовков C/C++ и связанной с ними библиотеки DLL. Вам останется лишь выбирать из списка доступных функций, структур, перечислений, констант, делегатов и проч. необходимые и импортировать в ваш проект.
Для начала, безусловно, нужно скачать и установить PInvoker. Скачайте с официального сайта установщик PInvoker.msi или расширение PInvokerAddin.msi для Visual Studio. Думаю, с этим проблем возникнуть не должно. Просто запустите нужный файл и следуйте инструкциям.
2Импорт определений PInvoke с помощью расширения PInvoker
Рассмотрим на примере, как работать с этим полезным инструментом. Запустите Visual Studio, создайте новый проект. В меню Сервис появился новый пункт: PInvoker Addin. Нажмите на него, и откроется окно настроек.
Выберите язык вашего проекта Language: C# или VB.NET. В выпадающем списке Profiles выберите <edit profiles>.
Откроется окно управления профилями. Выберите Create a new import profile и нажмите Next.
Теперь нужно добавить заголовочные header-файлы. Можете перетащить их мышью на окно PInvoker Profiles Wizard. Далее укажите директорию, где хранятся эти файлы.
На следующем шаге необходимо указать саму динамическую библиотеку. Её тоже можете смело тащить мышью на окно мастера профилей PInvoker.
После нажатия на кнопку Finish начнётся процесс импорта определений из выбранной динамической библиотеки. Об успешном завершении операции будет свидетельствовать надпись Import successful и появившийся в левом поле список названий функций из DLL.
Если обработка определений завершилась с ошибкой, то проверьте, что вы правильно указали директорию расположения заголовочных файлов и прогоните мастер ещё раз.
Теперь вы можете с лёгкостью импортировать PInvoke определения в свой проект. В левом поле (1), в поле Type выберите тип: функция, процедура, структура, перечисление, константа, делегат и т.д. В поле Name выберите название нужной конструкции. По одинарному клику её описание появится в центральном поле окна PInvoker (2). По двойному – откроется её определение в хедер-файле. Нажав кнопку Insert definition (3), вы вставите определение в свой проект C# или VB.NET. Теперь вы можете пользоваться импортированной функцией динамической библиотеки в своём проекте.
Как и любой инструмент, PInvoker не является панацеей. Он тоже может ошибаться. Например, некоторым импортируемым типам могут быть присвоены типы .NET, не корректно совместимые с типами неуправляемого кода, и в этом случае маршалинг завершится неудачей.
За этим нужно следить и не поступать бездумно. PInvoker предлагает варианты при импорте для некоторых типов, членов, областей видимости и т.п. Нажмите мышью на подсвеченную фиолетовым цветом надпись – и увидите доступные варианты.
Замечание от 2022. Я заметил, что сайт PInvoker больше не работает или переехал. Поэтому прикладываю к статье архив с установщиками – расширение для Студии VS2010 и как отдельное приложение.
Download attachments:
- Скачать PInvoker (246 Downloads)
Поблагодарить автора:
Поделиться
Related items
- Как выключить вход с паролем в операционной системе Windows
- Класс-обёртка для работы с библиотекой FTD2XX на Visual Basic .NET
- Как запустить Windows приложение в Astra Linux
- Параметры проекта по умолчанию в Visual Studio
- Добавление собственных определений для списка задач (Task List Tokens) в Visual Studio