Главная » Delphi » Совместное использование кода, ресурсов и данных несколькими приложениями

0

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

Кроме  того,  такие  библиотеки позволяют совместно использовать растровые изо бражения, шрифты, пиктограммы и других ресурсы, которые обычно входят  в состав файла  ресурсов и непосредственно связываются с создаваемым приложением.  Если эти ресурсы  разместить в библиотеке DLL, то многие приложения смогут воспользо ваться  ими,  не затрачивая дополнительной памяти, необходимой для загрузки  допол нительных экземпляров таких ресурсов.В 16 разрядной Windows  библиотеки DLL использовали собственный сегмент данных, поэтому  все  приложения, которые обращались к определенной библио теке DLL, получали  доступ к одним и тем же глобальным данным  и статическим переменным. В системе Win32  дело  обстоит иначе. Поскольку  образ  библиотеки DLL отображается на адресное пространство каждого  процесса, все данные, оп ределенные функциями в DLL, принадлежат отдельному процессу.  При  этом  сто ит подчеркнуть одну деталь: несмотря на то что данные  библиотек DLL не ис пользуются совместно  различными  процессами, они   могут  совместно  использо ваться   несколькими потоками внутри   одного   и  того  же  процесса.  А поскольку потоки выполняются независимо друг от друга, необходимо предпринимать меры предосторожности,  позволяющие избежать конфликтов  при  доступе  к  глобаль ным данным  библиотек DLL.

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

Сокрытие реализации

Иногда возникает потребность в сокрытии деталей реализации программ, доступ ных из библиотеки DLL. Для этого  существует  множество причин. Библиотеки DLL позволяют сделать  функции доступными пользователям, не  раскрывая их исходный код. Следует только  подготовить модуль интерфейса, позволяющий другим пользова телям  получить  доступ  к  создаваемой библиотеке.  В принципе,  подобная возмож ность  уже давно  реализована механизмом откомпилированных модулей Delphi  (DCU — Delphi  Compiled Unit), но необходимо заметить, что файл  DCU может  использовать ся лишь  другими  приложениями Delphi, причем созданными компилятором той  же самой  версии. А вот  формат библиотек DLL  не  зависит от  использованного языка программирования, поэтому  созданные в Delphi библиотеки можно  применять в при ложениях, написанных на C++, Visual Basic или любом другом языке, который под держивает работу с файлами DLL.

Модуль Windows является модулем интерфейса с библиотекой DLL Win32.  В ком плект поставки Delphi 6 включены исходные файлы модуля API Win32. Среди них есть файл  Windows.pas, содержащий исходный код модуля  Windows. В разделе inter- face файла  Windows.pas нетрудно  отыскать определения функций, подобных сле дующему:

function ClientToScreen(Hwnd: HWND;

var lpPoint: TPoint): BOOL; stdcall;В разделе implementation (реализации)  присутствует соответствующая связь  с библиотекой DLL:

function ClientToScreen; external user32 name ‘ClientToScreen';Эта строка означает, что  функция ClientToScreen() находится в динамически связываемой библиотеке User32.dll и ее имя ClientToScreen.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии