На этом шаге мы перечислим особенности использования DLL.
Как видите, создание простой DLL совсем несложно. Однако при составлении ваших собственных DLL вы должны помнить
о некоторых особенностях:
- В отличие от программы, которая имеет свой собственный сегмент кода, сегмент данных и сегмент стеков,
DLL может иметь только свои собственные сегмент кода и сегмент данных. DLL использует стек
вызывающей программы, что приводит к условию DS != SS. - Все функции в DLL должны быть описаны как far ("удаленные"), также far должны быть
все указатели, передаваемые в и получаемые из DLL. - У DLL отсутствует цикл обработки сообщений, и поэтому они не получают сообщений от окна.
Однако DLL может вызвать функции GetMessage() или PeekMessage() для проверки
сообщений, адресованных программе, которая вызвала эту DLL. - Статические данные в DLL доступны для любой программы, которая ее вызывает.
- В DLL вы можете пользоваться модульными диалоговыми окнами. При создании диалогового окна
используйте дескриптор экземпляра DLL и присвойте родительскому окну диалогового окна значение NULL. - В пределах DLL вы можете регистрировать и создавать окна. Однако сообщения для этих окон
посылаются экземпляру вызывающей программы, а не DLL. - Обычный код начальной загрузки, который добавляется в Windows-программу в процессе компоновки,
к DLL не добавляется. Это означает, что вы не можете пользоваться функциями getenv() или putenv() в DLL. - DLL может выделить глобальную память для экземпляра программы, который вызывал эту библиотеку.
Выделенная память освобождается, когда завершается выполнение экземпляра программы. - DLL может загружать ресурсы как из своего собственного файла, так и из файла экземпляра вызывающей
программы. Файл, из которого загружаются ресурсы, зависит от дескриптора экземпляра, используемого функцией,
загружающей ресурсы.
На следующем шаге мы рассмотрим процесс динамической компоновки.