рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Хранения формы в динамических библиотеках

Хранения формы в динамических библиотеках - раздел Религия,   Глава 18. Динамически Компонуемые Библиотеки....................

 

Глава 18. Динамически компонуемые библиотеки................................................................ 411

 

 

18.1. Что такое DLL? .............................................................................................................. 412

 

18.2. Простой пример создания DLL .................................................................................... 416

 

18.3. Замечания по использованию библиотек. .................................................................. 419

 

18.4. Хранения формы в динамических библиотеках. ....................................................... 420

 

18.5. Немодальные окна в динамических библиотеках...................................................... 423

 

18.6. Явная загрузка библиотек. ........................................................................................... 426

 

ы уже наверно много раз слышал заветное выражение «динамически компонуемые библиотеки. Пора познакомиться с ними поближе. В этой главе я постараюсь тебе дать всю необходимую информацию по ним, мы напишем несколько примеров, и ты всё прекрасно увидишь на практике.

В отличии от остальных глав, в этом вступительном слове я больше ничего говорить не буду, потому что если затронуть тему описания предназначения DLL файлов, то тема растянется в долгий разговор, поэтому я посвящу этому первую же часть этой главы.

18.1. Что такое DLL?

 

рограммисты всех стран уже более 30 лет борются с проблемой многоразового использования однажды написанного кода. Так уж повелось, что 30-50% кода в простых офисных приложениях схожи между собой или

решают одни и те же задачи. Ни один программист не захочет каждый раз снова писать один и тот же код. Как хорошо, когда можно использовать один раз написанный код многократно ....

Я сам не люблю в каждой новой программе писать одно и то же. Как хорошо, когда написал какой-то универсальный код, а потом только используешь его.

Решение №1.

Казалось, что это было самое простое и самое эффективное решение. Но все было прекрасно, пока не появилась многозадачность. Вот тут программисты и…  

Проблема №1.

А теперь представь, что другой чел написал другую утилиту с использованием этого модуля…. Его программа тоже увеличилась на 1 мегабайт. Получается,… Ну, конечно же, на счет модуля в 1 мегабайт я немного преувеличил. В те…  

Проблема №2.

Это только в последнее время память подешевела в несколько раз, и теперь лишние сто кило погоды не сделают. А раньше она стоила достаточно дорого, и… Хотя память и дешевая, программы от этого меньше не станут. Если посмотреть на…  

Решение №2.

Вот так. Теперь программа не увеличивалась на размер модуля при компиляции, а просто загружала код из DLL файла в память и использовала его. Если… Сейчас уже DLL -это не просто динамически подгружаемая библиотека. Ты наверно… У динамических библиотек есть единственный недостаток -на ее загрузку тратится лишнее время. Если бы код, находящийся…

Из чего же сделан Windows?

Большинство думает, что Windows - это все что находится в папке c:Windows, а ее ядро -это win.com. В какой-то степени это так, но не совсем. Ядро… Точно так же, за вывод графики в Windows отвечает GDI32.DLL, которая так же… В Windows очень много недостатков, но динамические библиотеки это достаточно гениальное решение многократно…

Графические движки.

Что такое DirectX? Это графическая библиотека, которая состоит из DirectDraw, DirectInput, DirectMusic, DirectPlay и так далее. Все это не что иное,… – это библиотеки созданные на основе технологии COM (та же технология, что и… Давай подведём итог тому, что уже было сказано. Динамические библиотеки практически ничем не отличаются от EXE файлов.…

Begin end.

Теперь давай добавим в нашу библиотеку одну функцию с именем Summ. У этой функции будет два параметра в виде целых чисел, и возвращать она будет… library FirsDLLProject; uses SysUtils, Classes;

Begin end.

Я тебе уже говорил, что все параметры, передаваемые в процедуры и в функции, передаются через стек. Если не указать ключевое слово StdCall, то… В остальном, функция ничем не отличается от тех, что мы уже писали. После описания функции идёт новое ключевое слово exports. После этого ключевого слова должно идти описания процедур,…

Procedure TForm1.Button1Click(Sender: TObject); var

R:Integer; begin

Application.MessageBox(PChar(IntToStr(r)), 'Результат функции Summ'); end; В первой строчке я вызываю функцию Summ с двумя числовыми параметрами.… Если ты попытаешься сейчас откомпилировать проект, то у тебя ничего не выйдет. Компилятор Delphi скажет, что он не…

Library ProjectDLL; uses

SysUtils, Classes; {$R *.RES} exports ShowAbout index 10; begin end.

Теперь щёлкаем File->New Form , чтобы создать новую форму. Нарисуй на ней что-нибудь, можно даже то, что сделал я (рисунок 18.4.1). Переходи в текст модуля. В разделе var, после объявления формы опиши процедуру ShowAbout:

Var

Form1: TForm1;

procedure ShowAbout(Handle: THandle);export;stdcall;

Опять присутствует ключ exportи добавлен ещё stdcall, указывающий на обязательность использования стандартного вызова процедуры.

Теперь напишем саму функцию после ключевого слова implementationи ключа {$R *.DFM}:

procedure ShowAbout(Handle: THandle);

begin //Установить указатель на приложение Application.Handle := Handle; //Создать форму Form1:= TForm1.Create(Application); //Отобразить Form1.ShowModal; //Очистить Form1.Free;

end;

Эта процедура получает в качестве параметра указатель на главное приложение. В первой строке я устанавливаю этот указатель в свойство Handle объекта Application. Этот объект хранит настройки всего приложения, и этим присваиванием мы связали оба приложения.

Во второй строке кода я создаю окно TForm1.Create(Application), в результате чего мне будет возвращён указатель на это окно. Результат я сохраняю в переменной Form1. Эта переменная объявлена в разделе varпроекта.

Следующей строкой я отображаю модально созданное нами окно. Как только оно закроется, будет выполнена последняя строка кода этой процедуры, а именно, окно будет уничтожено из памяти и процедура закончит своё выполнение.

В процедурах DLL библиотек будь более внимателен к высвобождению памяти. По моей практике могу сказать, что ошибки в библиотеках переносятся программами более критично, потому что тут основная программа практически бессильна.

Откомпилируй библиотеку (Ctrl+F9) и DLL-файл готов. Можно закрывать этот проект (File->Close All) и создавать новое приложение, из которого мы будем вызывать созданную в библиотеке процедуру (File->New Application).

В новом проекте переходим в текст формы и объявляем функцию ShowAbout:

unit Unit2;

Interface

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls;

procedure ShowAbout(Handle: THandle)stdcall;

Type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

Var

Form1: TForm1;

procedure ShowAbout;external 'ProjectDLL.dll' index 10;

Implementation

procedure ShowAbout(Handle: THandle)stdcall; Это не является ошибкой, и ты можешь выбрать любой из этих способов. Я чаще… procedure TForm1.Button1Click(Sender: TObject); begin ShowAbout(Handle); end;

Function ShowAbout(Handle: THandle):LongInt;stdcall; procedure FreeAbout(FormRef: LongInt);export;stdcall

function ShowAbout;external 'ProjectDLL.dll' index 10; procedure FreeAbout;external 'ProjectDLL.dll' index 11; Всё это уже должно быть знакомо и не должно вызывать вопросов. Теперь в… Подготовка закончено. Осталось только вызвать эти процедуры. Добавь на форму ещё одну кнопку. По нажатию первой, мы…

Procedure TForm1.Button1Click(Sender: TObject); begin

If f>0 then

f:=ShowAbout(Handle); end; Здесь идёт проверка, если f больше нуля, то надо освободить память от старого… По событию OnClose для главной формы тоже не помешает вызвать процедуру освобождения памяти. Если программа…

If dllHandle=0 then exit;//Библиотека не загрузилась

@sa:=GetProcAddress(dllHandle, 'ShowAbout');

If @sa=nil then exit;//Функция не найдена

Здесь у меня объявлено две локальные переменные: dllHandle – здесь будет храниться указатель на загруженную библиотеку. sa – имеет тип ShowA, т.е.…   В начале кода я выполняю уже знакомую проверку переменной f. Если она больше нуля, то окно уже показывалось и нужно…

Uses

SysUtils,

Classes,

Windows,

dialogs,

Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

exports ShowAbout index 10; exports FreeAbout index 11;

Procedure DLLEntryPoint(dwReason:DWord); begin

Case dwReason of

DLL_PROCESS_ATTACH:ShowMessage('Attach to process');

DLL_PROCESS_DETACH:ShowMessage('Detach to process');

DLL_THREAD_ATTACH:ShowMessage('Thread attach to process');

DLL_THREAD_DETACH:ShowMessage('Thread detach to process');

end; end;

Begin

DLLProc:=@DLLEntryPoint;

DLLEntryPoint(DLL_PROCESS_ATTACH); end.

Между beginи endбиблиотеки я назначаю переменной DLLProc нашу процедуру. После этого я вызываю её и в качестве параметра указываю событие… На компакт диске, в директорииПримерыГлава 18Entryты можешь увидеть пример…  

Begin end.

Напоминаю, что тип PChar – это указатель на строку оканчивающуюся нулём (шестнадцатеричный #0). Сама переменная типа PChar, это только указатель на… Но всё это небольшое отступление и напоминание уже пройдённого материала, так… В первой строке процедуры я проверяю значение переданного параметра Proc. В этом параметре мы должны получать адрес…

Type

TCompProc= procedure(Str:PChar);StdCall;
procedure CompS(Str:PChar; Proc:TCompProc);export;StdCall;

В первой строке я объявляю тот же процедурный тип, что и в динамической библиотеке. Во второй строке объявляется процедура, которую мы экспортируем из библиотеки. Объявление должно быть именно в таком порядке. Если ты попытаешься объявить сначала процедуру из библиотеки, то при компиляции Delphi выдаст ошибку, потому что в качестве второго параметра в процедуре стоит тип TCompProc и сначала его нужно описать, а потом использовать.

Теперь напишем процедуру CallFromDLL. Эта процедура будет вызываться из динамической библиотеки. Она будет выглядеть так:

procedure CallFromDLL(Str:PChar);StdCall; begin ShowMessage('DLL вызвала эту процедуру. Параметр равен: '+Str); end;

Наша процедура должна соответствовать объявленному типу TCompProc, а именно, в типе описано, что это процедура, что она имеет один параметр типа PChar и вызывается стандартно. Процедура должна соответствовать всему этому описанию, иначе произойдёт ошибка.

Внутри процедуры я вызываю только одну функцию ShowMessage, которая показывает на экран окно сообщения. В качестве единственного параметра нужно указать текст сообщения.

Теперь пометим на форму кнопку и по её нажатию напишем следующий код:

procedure TForm1.Button1Click(Sender: TObject); begin CompS('Привет', @CallFromDLL); end;

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

На компакт диске, в директорииПримерыГлава 18Callты можешь увидеть пример этой программы.

 

– Конец работы –

Используемые теги: хранения, формы, динамических, библиотеках0.08

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Хранения формы в динамических библиотеках

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Форма государства (форма правления, форма государственного устройства, политический режим)
И одна из главных стоящих передо мной целей - изучить более досконально одну из тем теории государства и права - формы государства Рассматриваемый… Так что за работу Марксистка - ленинская теория считает основной причиной… Полн. собр. соч. Т.33 стр. 7. По этой причине официальная советская историография долгое время не признавала…

Форма государства (форма правления, форма государственного устройства, политический режим)
И одна из главных стоящих передо мной целей - изучить более досконально одну из тем теории государства и права - формы государства Рассматриваемый… Так что за работу Марксистка - ленинская теория считает основной причиной… Полн. собр. соч. Т.33 стр. 7. По этой причине официальная советская историография долгое время не признавала…

Библиотека и краеведение. Работа библиотек с краеведческими документами
Краеведение переживает процесс поиска новых форм, постановки первостепенных задач. Оно приобретает ярко выраженный социально-политический характер, особенно в… Краеведение – это всестороннее изучение определенной части страны, города или деревни, других поселений местным…

Хуожественная литература в Рунете. Формы хранения и способы функционирования
И если в различных отраслях научной деятельности это отражение выражается в интенсификации интеллектуального труда, то в литературе к этому еще… Едва ли не единственная попытка систематизации была предпринята Е. Рогачевской… Скажем, можно ли считать сайты, занимающиеся продажей книг и публикацией тех или иных материалов за плату,…

Динамически загружаемые библиотеки (DLL)
Структура DLL библиотеки... Library имя заголовок библиотеки... Uses раздел модулей...

Формы собственности и формы предпринимательской деятельности в условиях рынка
Система экономических отношений собственности охватывает - от начала и до конца - весь хозяйственный процесс. Она пронизывает и составляет сердцевину всех отношений между людьми по… Организационно - правовые формы предпринимательской деятельности отличаются крайним разнообразием к этой категории…

Контрольные вопросы и задания для самопроверки. Напишите алгебраическую форму комплексного числа и дайте название каждого члена в этой форме
Сформулируйте определение комплексного числа... Напишите алгебраическую форму комплексного числа и дайте название каждого члена в этой форме...

Форма правления и формы государственного устройства.
Однако они весьма существенно отличаются друг от друга по особенностям своей внутренней организации, что выражается в понятии форма государства. В своей работе я охарактеризую, в каких конкретных формах существует и… Традиционно отечественная теория государства и права в этих целях всегда выделяло форму государства в три основных,…

Кроме того, существуют сложные формы кристаллов, например, кристаллы дендриты или зерна неправильной формы
Сложность процесса роста кристаллов приводит к тому что часто их вид который мы наблюдаем значительно отличается от идеальных кристаллов Поэтому... Рис Вростки игольчатого турмалина в прозрачном кварце Невьянские россыпи Урал...

Состав и формы бухгалтерской отчетности (СКЛАД І ФОРМИ БУХГАЛТЕРСЬКОЇ ЗВІТНОСТІ)
Здйснено перехд пдпримств органзацй на нову методологю бухгалтерського облку господарських операцй, доходв, витрат фнансових результатв на нову… Дана робота ма за мету розглянути чинн в Укран форми обов язково бухгалтерсько… Фнансов звти склада бльшсть пдпримств у всх кранах свту. Вигадати унверсальний звт, який вдображав би фнансове життя…

0.039
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам