Создание собственной 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; просмотров: 1597;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.