Часто перед .NET-програмістом виникає завдання: використовувати функціонал динамічної бібліотеки DLL, написаної іншим розробником, на некерованому коді. Часом функціонал цієї бібліотеки може бути вельми і вельми великий. Вручну прописувати у себе в проекті кожен клас, функції, константу і т. д. – дуже довго. На щастя, існують інструменти, частково автоматизують цей процес. Про одну з них ми і поговоримо.
Вам знадобиться
- - ПК з Visual Studio 2008/2010;
- - інтернет.
Інструкція
1
Якщо у вас є динамічна бібліотека *.dll написана на некерованому коді, наприклад, на мові C або C++, а також її відмінності (header) файли і вам потрібно оголосити у вашому проекті цілу купу конструкцій з бібліотеки, то дуже хорошим рішенням для вас може стати інструмент PInvoker. PInvoker вільно поширюється у вигляді розширення для Visual Studio IDE (підтримуються версії 2005, 2008 і 2010), а також у вигляді окремого додатка.Робота з ним проста і зручна. PInvoker імпортує PInvoke визначення керованого коду на C# або VB.NET з файлів заголовків C/C++ і пов'язаної з ними бібліотеки DLL. Вам залишиться лише вибрати зі списку доступних функцій, структур, перерахувань, констант, делегатів та ін. необхідні і імпортувати в ваш проект.Для початку потрібно скачати і встановити PInvoker. Скачайте з офіційного сайту установник PInvoker.msi розширення PInvokerAddin.msi для Visual Studio. Думаю, з цим проблем виникнути не повинно. Просто запустіть файл і дотримуйтесь інструкцій.
2
Розглянемо на прикладі, як працювати з цим корисним інструментом. Запустіть Visual Studio, створіть новий проект. У меню Сервіс -> Інструменти з'явився новий пункт: PInvoker. Натисніть на нього, і відкриється вікно налаштувань PInvoker Addin. Виберіть мову вашого проекту Language: C# або VB.NET. У випадаючому списку Profiles виберіть edit profiles.
3
Відкриється вікно " керування профілями. Виберіть Create a new import profile і натисніть Next.
4
Тепер потрібно додати відмінності header-файли. Можете перетягнути їхньою мишею на вікно PInvoker Profiles Wizard. Далі вкажіть папку, де зберігаються файли.
5
На наступному кроці необхідно вказати саму динамічну бібліотеку. Її теж можете сміливо тягнути мишею на вікно майстра профілів PInvoker.
6
Після натискання на кнопку Finish почнеться процес імпорту визначень з обраної динамічної бібліотеки. Про успішне завершення операції буде свідчити напис Import successful і з'явився в лівому полі список назв функцій з DLL.
7
Тепер ви можете з легкістю імпортувати PInvoke визначення в свій проект. У лівому полі (1), в полі Type виберіть тип: функція, процедура, структура, перерахування, константа, делегат і т. д. В полі Name виберіть назву потрібної конструкції. За одинарному кліку її опис з'явиться в центральному полі вікна PInvoker (2). За подвійним – відкриється її визначення в хедер-файлі. Натиснувши кнопку Insert definition (3), ви вставите визначення в свій проект C#/VB.NET. Тепер ви можете користуватися імпортованої функцією динамічної бібліотеки у своєму проекті.
Зверніть увагу
Як і будь-який інструмент, PInvoker не є панацеєю. Він теж може помилятися. Наприклад, деяким імпортованих типів можуть бути присвоєні типи .NET, не коректно сумісні з типами некерованого коду. За цим потрібно стежити і не чинити бездумно. Хоча треба визнати, що PInvoker в 90% випадках імпорт робить вірно. Для решти 10% розробники передбачили кнопку Options.
Корисна порада
Якщо обробка визначень завершилася з помилкою, то перевірте, що ви правильно вказали директорію розташування заголовних файлів і проженіть майстер.
В. О. Т.