Функции, вызываемые из DLL

Рейтинг: 1Ответов: 3Опубликовано: 26.03.2011

Какая разница между функциями DLL и внутренними функциями, кроме того что dll можно передавать (качать, давать и т.п.)?

Ответы

▲ 1Принят

DLL - (если своими словами) универсальное хранилище функций.

Примеры использования:

  • Вы написали DLL на Delphi. Ваш друг может ее использовать при написании программ на С++;
  • Плагины для программы;
▲ 3

Разница кардинальная.

DLL - это файл, который можно определенным образом подключить к программе *.EXE и из программы вызывать функции из библиотеки и использовать переменные из библиотеки. При этом несколько программ могут использовать одну DLL. Это позволяет вынести часто используемые функции в DLL и сэкономить память. Также если несколько программ используют одну библиотеку, то исправив ошибку в какой-нибудь функции, то исправление распространится на все программы. Обратная сторона - т.н. "DLL Hell", когда разные версии программ используют разные версии одних библиотек и в результате получаются конфликты. Так же с помощью DLL очень удобно наращивать функционал программы. Т.к. можно базовую функциональность реализовать в EXE, а через DLL реализовывать плагины (например, WinAMP, Foobar). К тому же библиотека DLL доступа в принципе всем программам, которые знают к ней путь. Т.е. если она есть в системе, то никто не мешает вызвать эту библиотеку из "левого" приложения. Даже если разработчик этой библиотеки этого не хотел :-) PS: DLL тоже могут вызывать ф-ции из DLL

А функция - это языковая конструкция. Никто не мешает дать другу Вашу функцию в виде исходного кода (*.PAS-файл), чтобы он включил ее в свою программу. Как вариант - можно сделать статически компонованную библиотеку. Это по сути объектный файл (т.е. откомпилированный исходник). Но придется еще файл описания делать. Тут уже не подскажу, но в справке Delphi это все есть :-) Копать в сторону Unit'ов (модулей)

▲ 1

К .dll написанной на Delphi можно обращаться из программ разработанных на других языках, т.к. поскольку существует соглашение о вызове подпрограмм из .dll, которое принято в C++ и называют стандартным. Кроме того фрагменты кода могут вызываться из .dll несколькими приложениями одновременно, при этом они не находятся постоянно в памяти, а подгружаются по мере вызова, что уменьшает место занимаемое программами и расход ОЗУ. И вообще, функции и процедуры - состаные элементы .dll, на мой взгляд - это главное отличие.