Наш канал в telegram

Как подружить C++ Builder и Windows DDK

При разработке программ под Windows с использованием WIN API вам может очень сильно облегчить жизнь использование стандартных хидеров Windows (заголовочных файлов) с описаниями различных функций, структур и прочим, а также использование готовых статических библиотек, которые можно прикомпилить к своим проектам. Ниже я расскажу где эти хидеры и библиотеки взять и как всё это использовать в своих проектах на С++ Builder.

Итак, первым делом нам понадобится Windows DDK (Driver Development Kit), называемый также просто WDK (Windows Driver Kit). Это набор инструментов для раработки драйверов под различные версии Windows. В состав этого набора помимо прочего входят примеры, документация, а также искомые хидеры и библиотеки.

Найти всё это не сложно — WDK бесплатно раздаётся компанией Microsoft всем желающим. Достаточно просто вбить в поисковике фразы «WDK» или «Windows DDK» и первая же ссылка отправит вас на официальный сайт Microsoft, на страницу с последней версией WDK. Здесь, однако есть один нюанс.

На сегодняшний день последняя версия WDK предназначена для разработки под Windows 10, 8.1, 8, 7 и для работы требует установки MSVS (Microsoft Visual Studio). Нам MSVS даром не нужен, раз мы в C++ Builder собираемся кодить. Поэтому мы будем ставить не последнюю версию WDK, а, скажем так, последнюю «нормальную» версию WDK. Для этого в поисковой строке нужно вбивать не «WDK», а «WDK 7». Поисковик при этом должен привести нас всё также на сайт Microsoft, но уже на страничку с Windows Driver Kit Version 7.1.0, с которой можно (и нужно) скачать ISO-шный образ с WDK (GRMWDK_EN_7600_1.ISO).

В описании к WDK 7.1.0 сказано, что этот набор поддерживает WIndows 7, XP, Vista и т.д. Однако, благодаря обратной совместимости, разработанные с помощью него программы вполне нормально будут работать и под WIndows 8 и под Windows 10.

Теперь нужно смонтировать скачанный ISO-шный образ в виртуальный CD-ROM, созданный, например, с помощью Alcohol 120% (или любой другой аналогичной программы) и установить Windows Driver Kit Version 7.1.0 к себе на компьютер.

Картинка под катом

ISO-образ WDK в виртуальном дисководе

[свернуть]

C появится папочка WinDDK, в которой и будет располагаться установленный набор инструментов.

Теперь переходим ко второму этапу — как использовать этот набор в C++ Builder.

1. Для того, чтобы можно было использовать хидеры и библиотеки — нужно просто прописать пути к папкам с хидерами и библиотеками. Если вы используете C++ Builder 2010 из Embarcadero RAD Studio 2010, то это делается так: идём в меню Tools -> Options... и далее в открывшемся окне переходим на вкладку C++ Options -> Paths and Directories. В строке Include path: нужно через точку с запятой добавить пути к хидерам: ;C:\WinDDK\7600.16385.1\inc\api;C:\WinDDK\7600.16385.1\inc\ddk, а в строке Library path: также через точку с запятой добавить пути к библиотекам: ;C:\Windows\System32;C:\WinDDK\7600.16385.1\lib-bcb

Картинка под катом

пути к папкам с хидерами и библиотеками

[свернуть]

Самые внимательные могут заметить, что в папке C:\WinDDK\7600.16385.1\ нет папки lib-bcb, есть только папка lib. Совершенно верно. Причина кроется в разных соглашениях о наименовании функций (naming convention) у Microsoft и Borland (соответственно, у Embarcadero, как у наследницы Borland всё аналогично, поэтому в дальнейшем я буду писать просто Borland). В зависимости от того, как объявлена экспортируемая функция, ее имя может быть дополнено компилятором определенными символами, причём Microsoft и Borland делают это по-разному. Из-за этого, мы не можем напрямую прикомпиливать статические либы от Microsoft в проекты на Borland (компилятор борланда будет ругаться, что функции объявлены неправильно или что он вообще не может их найти).

К счастью есть небольшой хук ушами, позволяющий преобразовать либы от Microsoft к понятному для Borland виду. Этот хук заключается в использовании специальной консольной утилитки coff2omf. Утилитка устанавливается вместе с Borland C++ Builder. пользоваться ей довольно просто — она принимает на вход два аргумента — имя либы, которую нужно переделать под Borland, и имя, которое нужно присвоить библиотеке, получившейся в результате переделки.

Например, пусть у нас есть библиотека от Microsoft x.lib и мы хотим переделать её в библиотеку x-bcb.lib, которую можно будет использовать в проектах с Borland С++ Builder:

  • Запускаем командную строку (cmd.exe), и переходим в папку с библиотекой (выполняем в командной строке cd path_to_library_folder)
  • Выполняем coff2omf x.lib x-bcb.lib

Всё, после этого у нас в папке с библиотекой x.lib появится файл x-bcb.lib. Это та же библиотека, но уже переделанная под Borland и её можно нормально вкомпиливать в свои проекты на Borland C++ Builder директивой #pragma comment(lib,"X-BCB.LIB", указав при этом в настройках IDE (Tools -> Options... -> C++ Options -> Paths and Directories -> Library path:) путь к этой библиотеке.

Теперь, надеюсь, понятно, откуда взялась папка lib-bcb. Я просто складываю в эту папку все либы, которые я взял из папки C:\WinDDK\7600.16385.1\lib и переделал под использование в Borland C++ Builder (можно заморочиться и вообще сразу все библиотеки переделать, а можно делать это по мере необходимости использования тех или иных либ в ваших проектах).

На этом на сегодня всё. Удачи!

Добавить комментарий