Меню сайта
Категории раздела
PHP [0]
Видео уроки [0]
DELPHI [45]
BASIC [0]
HTML [0]
JAVA [0]
C++ / C# [0]
Радио
ЧАТ
200
Облако тегов
Облако фото
Форум
  • композитная арматура (0)
  • Справедливо ли это???? (1)
  • Недвижимость в Тюмени (1)
  • Качество услуг и обслуживания (2)
  • строительный эксперт (0)
  • гид по Греции (0)
  • винные туры по Италии (0)
  • деревянные лестницы (0)
  • гид по Италии (0)
  • Разные поздравления (1)
  • Главная » Статьи » Программисту » DELPHI

    Работа с DLL библиотеками
    DLL - Dynamic Link Library иначе динамически подключаемая библиотека, которая позволяет многократно применять одни и те же функции в разных программах. На самом деле довольно удобное средство, тем более что однажды написанная библиотека может использоваться во многих программах. В сегодняшнем уроке мы научимся работать с dll и конечно же создавать их!
    Ну что ж начнём!

    Для начала создадим нашу первую Dynamic Link Library! Отправляемся в Delphi и сразу же лезем в меню File -> New ->Other.

    В результате у нас появляется лишь окно с кодом, заметьте никакой формы у нас здесь нет !
    Теперь начинается самое интересное. Напишем наши первые процедуры в библиотеке.

    library Project2;
    //Вы, наверное уже заметили, что вместо program
    //при создании dll используется слово library.
    //Означающее библиотека.
    uses
    SysUtils, dialogs,
    Classes; // Внимание ! Не забудьте указать эти модули,
    // иначе код работать не будет
    {$R *.res}
    {В ЭТУ ЧАСТЬ ПОМЕЩАЕТСЯ КОД DLL}

    Procedure FirstCall; stdcall; export;
    //Stdcall – При этом операторе параметры помещаются в стек
    //справа налево, и выравниваются на стандартное значение
    //Экспорт в принципе можно опустить, используется для уточнения
    //экспорта процедуры или функции.
    Begin
    ShowMessage('Моя первая процедура в dll');
    //Вызываем сообщение на экран
    End;

    Procedure DoubleCall; stdcall; export;
    Begin
    ShowMessage('Моя вторая процедура');
    //Вызываем сообщение на экран
    End;

    Exports FirstCall, DoubleCall;
    //В Exports содержится список экспортируемых элементов.
    //Которые в дальнейшем будут импортироваться какой-нибудь программой.
    begin
    End.

    На этом мы пока остановимся т.к. для простого примера этого будет вполне достаточно. Сейчас сохраняем наш проект, лично я сохранил его под именем Project2.dll и нажимаем комбинацию клавиш CTRL+F9 для компиляции библиотеки. В папке, куда вы сохранили dpr файл обязан появится файл с расширением dll, эта и есть наша только что созданная библиотека. У меня она называется Project2.dll

    Займёмся теперь вызовом процедур из данной библиотеки. Создаём по стандартной схеме новое приложение. Перед нами ничего необычного просто форма. Сохраняем новое приложение в какую-нибудь папку. И в эту же папку копируем только что созданную dll библиотеку. Т.е. в данном примере Project2.dll

    Теперь вам предстоит выбирать, каким способом вызывать функции из библиотеки. Всего существует два метода вызова.

    Способ № 1
    Пожалуй, это самый простой метод вызова процедур находящихся в библиотеке.
    Идеально подходит для работы только с одной библиотекой.

    Ну что поехали...
    После ключевого слова implementation прописываем следующий код:

    Procedure FirstCall; stdcall; external 'Project2.dll';
    // Вместо Project2.dll может быть любое имя библиотеки
    Procedure DoubleCall; stdcall; external 'Project2.dll';

    Здесь, как вы уже наверное догадались, мы сообщаем программе названия наших процедур и говорим, что они находятся в dll библиотеке, в моем случае с именем Project2.dll

    Теперь для того, что бы вызвать данные процедуры нам необходимо лишь вставить их названия в любое место кода, что мы сейчас и сделаем. Кидаем на форму 2 компонента Button с закладки Standart и создаем на каждой обработчик событий OnClick

    OnClick первой кнопки:

    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
    FirstCall; // Имя процедуры, которая находится в dll
    End;

    OnClick второй кнопки:

    Procedure TForm1.Button2Click(Sender: TObject);
    Begin
    DoubleCall; // Имя процедуры, которая находится в dll
    End;

    Вот и все !

    Способ № 2:
    Сложнее чем первый, но у него есть свои плюсы, а самое главное, что он идеально подходит для плагинов.
    Для применения данного метода, первым делом объявляем несколько глобальных переменных:

    Var
    LibHandle: HModule; //Ссылка на модуль библиотеки
    FirstCall: procedure; stdcall;
    //Имена наших процедур лежащих в библиотеке.
    DoubleCall: procedure; stdcall;

    Затем после ключевого слова implementation напишем процедуру которая будет загружать нашу библиотеку:

    Procedure LoadMyLibrary(FileName: String);
    Begin
    LibHandle:= LoadLibrary(PWideChar(FileName));
    //Загружаем библиотеку!
    // Внимание ! PChar для версий ниже 2009 Delphi
    If LibHandle = 0 then begin
    MessageBox(0,'Невозможно загрузить библиотеку',0,0);
    Exit;
    End;
    FirstCall:= GetProcAddress(LibHandle,'FirstCall');
    //Получаем указатель на объект
    //1-ий параметр ссылка на модуль библиотеки
    //2-ой параметр имя объекта в dll
    DoubleCall:= GetProcAddress(LibHandle,'DoubleCall');
    If @FirstCall = nil then begin
    //Проверяем на наличие этой функции в библиотеке.
    MessageBox(0,'Невозможно загрузить библиотеку',0,0);
    Exit;
    End;
    If @DoubleCall = nil then begin
    //Проверяем на наличие этой функции в библиотеке.
    MessageBox(0,'Невозможно загрузить библиотеку',0,0);
    Exit;
    End; End;

    После чего на форме создаем, обработчик событий OnCreate, в котором с помощью только что созданной процедуры мы загрузим нашу библиотеку

    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
    LoadMyLibrary('Project2.dll');
    End;

    Теперь опять же, для того, что бы вызвать необходимые процедуры из нашей библиотеки нам необходимо лишь вставить их названия в любое место кода. Для этого кидаем на форму 2 компонента Button с закладки Standart и создаем на каждой обработчик событий OnClick

    OnClick первой кнопки:

    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
    FirstCall; // Имя процедуры, которая находится в dll
    End;

    OnClick второй кнопки:

    Procedure TForm1.Button2Click(Sender: TObject);
    Begin
    DoubleCall; // Имя процедуры, которая находится в dll
    End;

    Ну и напоследок создаем обработчик событий OnDestroy на форме, в котором выгружаем dll библиотеку из памяти

    Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
    FreeLibrary(LibHandle);
    //Выгружаем библиотеку из памяти.
    End;

    Вот и все ! Второй способ получился довольно громоздкий, но его плюс в уточнении хранящегося объекта в библиотеке.

    Категория: DELPHI | Добавил: SeM (09.04.2011)
    Просмотров: 1110 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    Новый Год
    Опрос
    Откуда вы узнали о сайте?


    Всего ответов: 14
    Всего голосовало: 14
    Обсудить на форуме
    Друзья сайта
    измерьте скорость интернета Яндекс.Метрика
    Проверить тИЦ и PR
    Статистика
    Погода
    Яндекс.Погода
    Коменнтарии

    Извиняюсь, заработал. Спасибо за урок biggrin

    Компонент не работает

    Давайте помогу разобраться ? вы хотите что бы когда выбиралась станция сразу начинала проигрывать? скиньте исходник или как лучше связаться с вами?

    у меня все работает!

    Нифига не робит...
    Кто знает как сделать чтобы на жесткий жертвы сохранял..
    ISQ 606017777

    FSDGHDFJHRG


    Отзывы Фото
    6 микр. Красивое место....

    Ершов ))))

    Старый музей но щас его перенесли...

    Фотография под горы smile

    Красивое фото!!! smile

    Copyright MyCorp © 2024