Библиотеки динамической компоновки
- DLL_THREAD_DETACH – завершен один из потоков процесса, использующего библиотеку;
78
- DLL_PROCESS_DETACH – библиотека будет выгружена в результате завершения процесса, требующего библиотеку, или в результате вызова функции FreeLibrary.
Функция DLLEntryPoint может отменить загрузку библиотеки, если вернет значение
FALSE. Для успешной инициализации библиотеки функция должна возвращать значение TRUE.
Для того, чтобы функции DLL-библиотеки были доступны использующим их приложениям, эти функции необходимо сделать экспортируемыми. Самый простой способ экспортировать функции – описать их соответствующим образом в файле определения модуля (*.def) DLL-библиотеки. Ниже приведен пример подобного файла.
LIBRARY mydll
DESCRIPTION “ Dynamic-Link Library”
EXPORTS
Func_A @1
Func_B @2
Func_C @3
Оператор LIBRARY задает имя DLL-библиотеки, под которым она будет определена в библиотеке импорта для компиляции исполнимых модулей приложений, импортирующих функции данной библиотеки. Оператор DESCRIPTION задает произвольную текстовую строку- описание библиотеки. В операторе EXPORTS перечислены имена и порядковые номера экспортируемых библиотекой функций. В принципе достаточно указать только имена функций, но рекомендуется также указывать и их порядковые номера. Дело в том, что функции библиотеки вызываются не по именам, а по порядковым номерам, которые фактически являются номерами точек входа в библиотеку. Поэтому, редактор связей самостоятельно присваивает номера функциям, если они явно не указаны в файле определения модуля. Это сильно осложнит добавление новых функций в библиотеку, так как потребует перекомпиляции не только самой библиотеки, но и всех приложений, использующих данную библиотеку.
предыдущаяследующая