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

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

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

Графические движки. - раздел Религия, Хранения формы в динамических библиотеках Любой Игрок Обязан Знать Про Существование Opengl. Что Это Такое? Какой-То Па...

Любой игрок обязан знать про существование OpenGL. Что это такое? Какой-то пакет программ? Какой-то SDK для создания графики? Ничего подобного, это всего лишь две динамические библиотеки opengl.dll (opengl32.dll) и glu.dll (glu32.dll).

Что такое DirectX? Это графическая библиотека, которая состоит из DirectDraw, DirectInput, DirectMusic, DirectPlay и так далее. Все это не что иное, как простые динамически подгружаемые библиотеки. DirectDraw это Ddraw.dll, DirectInput это Dinput.dll, DirectMusic это Dmusic.dll и так далее. Хотя DirectX это не простые библиотеки

– это библиотеки созданные на основе технологии COM (та же технология, что и ActiveX). Любые игровые движки выполнены в виде динамически загружаемых библиотек, потому что их использование очень простое и удобное для любого программиста.

Давай подведём итог тому, что уже было сказано. Динамические библиотеки практически ничем не отличаются от EXE файлов. Это такой же скомпилированный код, только он не может запускаться самостоятельно, потому что в библиотеке нет точки входа (точки, с которой начинает своё выполнение любая программа) В dll файлах хранятся только процедуры и функции, которые можно вызывать из других программ.

Чаще всего динамические библиотеки имеют расширение dll, но можно установить и любое другое расширение или вообще убрать его. Библиотеки имеют свои разновидности, например, драйверы – это тоже динамические библиотеки и им принято давать расширение drv. Возможно так же использование расширения sys для системных файлов. Так что операционная система не накладывает ограничений на расширения динамических библиотек, главное, чтобы тебе было понятно и удобно работать.

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

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

Говоря о библиотеках (dll) я всё время говорил о динамических библиотеках. Но существуют и статические варианты библиотек. Чем они отличаются? В принципе, библиотека одна и та же, поэтому термин статической DLL я считаю неправильным (хотя иногда встречаю в литературе). Но всё же я вынес это название в заголовок, чтобы показать тебе на ошибку.

Библиотеки dll всегда динамические и создаются они с целью динамической загрузки находящихся в них ресурсах. Но не смотря на это, многие компиляторы позволяют присоединять код dll статически. В этом случае при компиляции программы код или данные, находящиеся в dll, становятся неотъемлемой частью исполняемого файла. В этом случае программа и библиотека становятся как единое целое. Это очень удобно, когда библиотека небольшая или тебе необходимо, чтобы программа состояла только из одного запускного файла. Здесь динамическая загрузка не подходит, и надеяться на существование библиотеки на машине клиента нельзя. Такая ситуация может возникнуть, когда ты хочешь показать клиенту демонстрационный файл твоей программы и удобно иметь только один запускной файл, а не множество библиотек.


 

 

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

 

Так как DLL – это отдельный файл, то и создаётся он в Delphi как отдельный проект. Для создания новой динамической библиотеки нужно выбрать из меню File пункт New и затем Other. В окне создания нового проекта (рисунок 18.2.1) нужно выбрать на закладке New пункт DLL Wizard. Выбери этот пункт и нажми ОК.

Несмотря на то, что мы выбрали DLL Wizard (слово Wizard говорит о том, что должен запуститься мастер), будет просто создан пустой проект с одним только модулем. Модуль будет содержать следующий текст (я убрал только комментарии):

library Project2;

uses SysUtils, Classes;

{$R *.res}

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

Эта тема принадлежит разделу:

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

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

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

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

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

Все темы данного раздела:

Решение №1.
Самым первым решением этой проблемы стал модульное программирование. Ты пишешь какой-то кусок кода, оформляешь его в виде модуля, а потом просто используешь его в своих программах. Все прекрасно и

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

Проблема №2.
Пока существовали только однозадачные операционные системы, проблема с излишней растратой дискового пространства была единственной. Но как только задумались о многозадачности и в мыслях Билла Гейтс

Решение №2.
И вот тут было найдено вполне солидное решение: не стыковать модули с основной программой, а сохранять их в отдельный файл и пусть любая программа загружает его по мере надобности. Сказали, сделали

Из чего же сделан Windows?
Все наверно помнят такую песенку: "Из чего же, из чего же, из чего же, сделаны эти мальчишки?". Глупейшая песня, и я со слезами на глазах вспоминаю, как я в лагере (я имею ввиду пионерски

Begin end.
Если открыть менеджер проектов (Меню View->Project Manager), то в окне вообще не будет видно ни одного модуля. Это потому что код, который мы видели выше относиться к самой библиотеки. Вы

Begin end.
Обрати внимание, что функция у нас объявлена не так как всегда. В конце строки объявления, после типа возвращаемого значения стоит ключевое слово StdCall. Оно говорит о том, что дл

R:Integer; begin
r:=Summ(10,34); Application.MessageBox(PChar(IntToStr(r)), 'Результат функции Summ'); end; В первой строчке я вызываю функцию Summ с двумя

SysUtils, Classes; {$R *.RES} exports ShowAbout index 10; begin end.
Я добавил только одну строку exports ShowAbout index 10;. У нас будет только одна процедура ShowAbout с индексом 10. Эта процедура будет показывать окно «О программе».

Implementation
Обрати внимание, что первое описание процедуры я написал не в разделе type, а до него: procedure ShowAbout(Handle: THandle)stdcall; Это не являет

Function ShowAbout(Handle: THandle):LongInt;stdcall; procedure FreeAbout(FormRef: LongInt);export;stdcall
В разделе varпишем следующее: function ShowAbout;external 'ProjectDLL.dll' index 10; procedure FreeAbout;external 'ProjectDLL.dll' index 11; Всё

If f>0 then
FreeAbout(f); f:=ShowAbout(Handle); end; Здесь идёт проверка, если f больше нуля, то надо освободить память от старого окна, а потом пытат

If @sa=nil then exit;//Функция не найдена
f:=sa(Handle); FreeLibrary(dllHandle); end; Здесь у меня объявлено две локальные переменные: dllHandle – здесь будет храниться указатель на загруженную библиот

DLLEntryPoint(DLL_PROCESS_ATTACH); end.
В разделе usesпоявилось объявление двух новых модулей windows и dialogs, без них наш код не скомпилируется. Чуть дальше появилась процедура DLLEntryPoint с одн

Begin end.
Первое, что здесь бросается в глаза – объявление в разделе typeнового типа – TCompProc. Новый тип объявлен как процедура с одним параметром в виде переменной типа PChar

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