Создание собственной DLL
Работа с динамическими библиотеками Dynamic Link Library – DLL.
Создание собственной DLL
С точки зрения программиста - DLL представляет собой библиотеку функций (ресурсов), которыми может пользоваться любой процесс, загрузивший эту библиотеку. Сама загрузка, кстати, отнимает время и увеличивает расход потребляемой приложением памяти; поэтому бездумное дробление одного приложения на множество DLL ничего хорошего не принесет.
Другое дело - если какие-то функции используются несколькими приложениями. Тогда, поместив их в одну DLL, мы избавимся от дублирования кода и сократим общий объем приложений - и на диске, и в оперативной памяти. Можно выносить в DLL и редко используемые функции отдельного приложения; например, немногие пользователи текстового редактора используют в документах формулы и диаграммы - так зачем же соответствующим функциям впустую "отъедать" память?
Загрузившему DLL процессу доступны не все ее функции, а лишь явно предоставляемые самой DLL для "внешнего мира" - т. н. экспортируемые. Функции, предназначенные сугубо для "внутреннего" пользования, экспортировать бессмысленно (хотя и не запрещено). Чем больше функций экспортирует DLL - тем медленнее она загружается; поэтому к проектированию интерфейса (способа взаимодействия DLL с вызывающим кодом) следует отнестись повнимательнее. Хороший интерфейс интуитивно понятен программисту, немногословен и элегантен: как говорится, ни добавить, ни отнять. Строгих рекомендаций на этот счет дать невозможно - умение приходит с опытом
Для экспортирования функции из DLL - перед ее описанием следует указать ключевое слово __declspec(dllexport), как показано в следующем примере:
// myfirstdll.c
#include <stdio.h>
// Ключевое слово __declspec(dllexport)
// делает функцию экспортируемой
__declspec(dllexport) void Demo(char *str)
{
// Выводим на экран переданную функции Demo строку
printf(str);
}
Листинг. Демонстрация экспорта функции из DLL
Для компиляции этого примера в режиме командной строки можно запустить компилятор Microsoft Visual Studio: "cl.exe myfirstdll.c /LD". Ключ "/LD" указывает линкеру, что требуется получить именно DLL.
Для сборки DLL из интегрированной оболочки Microsoft Visual Studio - при создании нового проекта нужно выбрать пункт "Win32 Dynamics Link Library", затем "An Empty DLL project"; потом перейти к закладке "File View" окна "Workspace" - и, выбрав правой клавишей мыши папку "Source Files", добавить в проект новый файл ("Add Files to Folder"). Компиляция осуществляется как обычно ("Build" ( "Build").
Если все прошло успешно - в текущей директории (или в директории Release\Debug при компиляции из оболочки) появится новый файл - "MyFirstDLL.dll". Давайте заглянем в него через "микроскоп" - утилиту dumpbin, входящую в штатную поставку SDK и Microsoft Visual Studio: "dumpbin /EXPORTS MyFirstDLL.dll". Ответ программы в несколько сокращенно виде должен выглядеть так:
Section contains the following exports for myfirst.dll
0 characteristics
0.00 version
1 ordinal base
1 number of functions
1 number of names
1 0 00001000 Demo
Созданная DLL действительно экспортирует функцию "Demo".
Дата добавления: 2017-01-26; просмотров: 1594;