Повторное использование разработанных кодов____________________435

В этой книге неявным образом уже многократно использовались DLL. Напри-
мер, именно в DLL хранятся все процедуры и функции API Windows, которые
очень часто применяются или непосредственно, или косвенно через аналогичные
функции C++Builder, инкапсулирующие те или иные функции API Windows. В
DLL хранятся также все стандартные диалоги Windows, которые вы, наверняка,
постоянно используете чуть ли не в любом своем приложении. Так что с DLL вы
уже знакомы очень тесно, хотя, может быть, и не подозреваете об этом. Но в этом
разделе речь пойдет о других DLL — о библиотеках, создаваемых вами для хране-
ния собственных кодов.

Предположим, вы разработали различные полезные процедуры и функции и
используете их в различных своих приложениях. Конечно, вы можете просто ско-
пировать эти процедуры и функции в каждый ваш проект. Но тогда, если несколь-
ко ваших приложений работает на компьютере одновременно, то копии ваших
процедур загружены в память в выполняемом модуле каждого приложения и па-
мять, таким образом, расходуется неэффективно. Да и затраты пространства на
дисках также избыточны, поскольку эти процедуры в составе выполняемых моду-
лей также тиражируются. Если же вы поместили свои процедуры в DLL, то все эти
проблемы снимаются.

Создание DLL повышает также гибкость вашей программы. Например, вы мо-
жете создать несколько библиотек, содержащих все используемые вашим прило-
жением тексты — надписи, подсказки и т.п. Каждая из этих библиотек может со-
держать тексты на том или ином языке: русском, английском, немецком. Тогда в
зависимости от того, какую из этих библиотек будет применять пользователь, про-
граммы будут общаться с ним на том или ином языке.

Еще одним преимуществом DLL является то, что они могут использоваться
приложениями, написанными на других алгоритмических языках. Например, вы
можете использовать библиотеки, написанные на Object Pascal, Visual Basic, Ac-
cess Basic и др. А ваши библиотеки, созданные в C++Builder, смогут использовать
любые системы, которые умеют вызывать DLL, независимо от того, на каких алго-
ритмических языках они написаны.

7.5.2 Статическое и динамическое присоединение DLL
к приложению

Библиотеки DLL могут связываться с вашим приложением двумя путями:

статическим присоединением или динамическим присоединением.

Статическое присоединение означает, что DLL загружается сразу, как только
начинает выполняться приложение, которое будет ее использовать. Это наиболее
простой способ использования DLL. Вызов функций в приложении, использующем
подобную DLL, почти не отличается от вызова любых других функций. Некоторы-
ми недостатками такого подхода можно считать увеличение времени загрузки ва-
шего приложения (ведь кроме выполняемого модуля приложения в этот момент
грузятся и модули соответствующих DLL) и невозможность выполнения приложе-
ния пользователем, у которого нет соответствующего файла DLL. Последнее труд-
но назвать существенным недостатком, поскольку, конечно, вы должны распро-
странять приложение вместе с DLL. Но ведь некоторые действия приложение мог-
ло бы делать и без DLL, т.е. оно могло бы в урезанном виде функционировать и при
отсутствии DLL. Однако, при статическом присоединении это невозможно. Еще од-
ним недостатком статического присоединения является то, что DLL занимает па-
мять все время, в течение которого выполняется приложение, независимо от того,
вызываются ли в данном сеансе работы с приложением какие-то функции библио-
теки, или нет.

Статическое присоединение подразумевает, что для DLL создан специальный
файл описаний импортируемых функций (import library file). Этот файл имеет то