Мой DELPHI – Программирование

Всё для программера

Как узнать, находится ли дискета в дисководе?

Как узнать, находится ли дискета в дисководе?

type
  TDriveState(DS_NO_DISK, DS_UNFORMATTED_DISK,
    DS_EMPTY_DISK, DS_DISK_WITH_FILES);

function DriveState(DrvLetter: Char): TDriveState;

var

  Mask: String[6];

  SearchRec: TSearchRec;

  oldMode: Cardinal;

  ReturnCode: Integer; Прочитать остальную часть записи »

Урок 14: Использование DLL в Delphi

Урок 14: Использование DLL в Delphi

  1. Понятие DLL
  2. Вспомним процесс программирования в DOS. Преобразование исходного
    текста программы в машинный код включал в себя два процесса – компиляцию
    и линковку. В процессе линковки, редактор связей, компоновавший отдельные
    модули программы, помещал в код программы не только объявления функций
    и процедур, но и их полный код. Вы готовили таким образом одну программу,
    другую, третью … И везде код одних и тех же функций помещался в программу
    полностью.

    В многозадачной среде такой
    подход был бы по меньшей мере безрассудным, так как очевидно, что огромное
    количество одних и тех же функций, отвечающих за прорисовку элементов пользовательского
    интерфейса, за доступ к системным ресурсам и т.п. дублировались бы полностью
    во всех приложениях, что привело бы к быстрому истощению самого дорогого
    ресурса – оперативной памяти. В качестве решения возникшей проблемы, еще
    на UNIX-подобных платформах была предложена концепция динамической компоновки.

    Но, чем же отличаются Dynamic
    Link Library (DLL) от обычных приложений? Для понимания этого требуется
    уточнить понятия задачи (task), экземпляра (копии) приложения (instance)
    и модуля (module).

    При запуске нескольких экземпляров
    одного приложения, Windows загружает в оперативную память только одну копию
    кода и ресурсов – модуль приложения, создавая несколько отдельных сегментов
    данных, стека и очереди сообщений, каждый набор которых представляет
    из себя задачу, в понимании Windows. Копия приложения представляет из себя
    контекст, в котором выполняется модуль приложения.

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

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

    Часто, в виде DLL создаются
    отдельные наборы функций, объединенные по тем или иным логическим признакам,
    аналогично тому, как концептуально происходит планирование модулей ( в
    смысле unit ) в Pascal. Отличие заключается в том, что функции из модулей
    Pascal компонуются статически – на этапе линковки, а функции из DLL компонуются
    динамически, то есть в run-time. Прочитать остальную часть записи »