IPB
ЛогинПароль:

> P-robots, а почему бы не придумать что то лучше
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Видели поединки P-роботов?
Если нет, советую посмотреть.
Так вот, это очень старая штука.
А что если сделать новую версию, только с более красочными боями?
Тогда можно было бы устраивать бои роботов.
Как идея?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


вот тебе из DRKB:
Цитата
Если ваш компьютер работает под управлением операционной системы Windows, то вы не можете не знать о существовании динамических подсоединяемых библиотек (dynamic link libraries - DLL). Достаточно взглянуть на список файлов, расположенных в системном каталоге Windows - порой количество используемых операционной системой динамических библиотек достигает нескольких сотен. DLL являются неотъемлемой частью функционирования операционных систем семейства Microsoft Windows. Однако для вас может быть неочевидна необходимость использования динамических библиотек при разработке приложений. В рамках данной статьи мы поговорим о принципах функционирования DLL и их использования в процессе создания ваших собственных программ.

Для начала давайте выясним, что собой представляет динамическая подключаемая библиотека. Итак, DLL - это один или несколько логически законченных фрагментов кода, сохраненных в файле с расширением.dll. Этот код может быть запущен на выполнение в процессе функционирования какой-либо другой программы (такие приложения называются вызывающими по отношению к библиотеке), но сама DLL не является запускаемым файлом.

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

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

Screen.Cursors[myCursor] := LoadCursor(HInstance, MYCURSOR');

LoadCursor - функция Windows API, которая вызывается приложением из динамической библиотеки User 32.dll. Кстати, примером хранимых в динамической библиотеке ресурсов могут являться такие стандартные диалоги Windows, как диалог открытия файла, диалог печати или настройки принтера. Эти диалоги находятся в файле Comctl32.dll. Однако многие прикладные разработчики используют функции вызова форм этих диалогов, совершенно не задумываясь, где хранится их описание.

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


Аргументы в пользу использования DLL



Итак, прежде чем перейти к обсуждению структуры динамических библиотек, необходимо поговорить о тех преимуществах, которые предоставляет их использование разработчику. Во-первых, это повторное использование кода. Думаю, нет необходимости пояснять удобство использования один раз разработанных процедур и функций при создании нескольких приложений? Кроме того, в дальнейшем вы сможете продать некоторые из своих библиотек, не раскрывая исходных кодов. А чем тогда это лучше компонентов, спросите вы? А тем, что функции, хранящиеся в библиотеке, могут быть вызваны на выполнение из приложений, разработанных не на Object Pascal, а, например, с использованием C++Builder, Visual Basic, Visual C++ и т.д. Такой подход накладывает некоторые ограничения на принцип разработки библиотеки, но это возможно. Звучит заманчиво? Мне кажется, даже очень. Но это еще не все.

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

В-третьих, следует поговорить вот о чем. Всего несколько лет назад при разработке программного обеспечения вы могли совершенно не волноваться относительно распространения ваших продуктов где-либо, кроме вашей страны. Я хочу сказать, что проблема перевода на другие языки текста на элементах управления (пункты меню, кнопки, выпадающие списки, подсказки), сообщений об ошибках и т.д. не стояла так остро, как сейчас. Однако, с повсеместным внедрением интернета у вас появилась возможность быстрой передачи готовых программных продуктов практически в любую точку мира. И что будут делать с вашей программой где-нибудь в Объединенных Арабских Эмиратах, если кроме как по-русски, она с пользователем общаться не умеет? Вы сами можете оценить этот эффект, если хоть раз на экране вашего компьютера вместо с детства знакомого русского языка появляется "арабская вязь" (например, из-за "сбоя" шрифтов). Итак, уже сейчас вы должны планировать возможность распространения ваших приложений в других странах (если, конечно, у вас есть желание получить как можно больше прибыли). Соответственно, встает вопрос быстрого перевода интерфейса вашей программы на другие языки. Одним из путей может являться создание ресурсов интерфейсов внутри DLL. К примеру, можно создать одно приложение, которое в зависимости от версии динамической библиотеки будет выводить сообщения на различных языках.

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


Основы разработки DLL



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

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

library MyFirstDLL;
uses
  SysUtils, Classes, Forms, Windows;

procedure HelloWorld(AForm : TForm);
begin
  MessageBox(AForm.Handle, 'Hello world!', 'DLL Message Box',
  MB_OK or MB_ICONEXCLAMATION);
end;

exports
  HelloWorld;

begin
end.

Первое, на что следует обратить внимание, это ключевое слово library, находящееся вверху страницы. Library определяет этот модуль как модуль библиотеки DLL. Далее идет название библиотеки. В нашем примере мы имеем дело с динамической библиотекой, содержащей единственную процедуру: HelloWorld. Причем обратите внимание, что данная процедура по структуре ничем не отличается от тех, которые вы помещаете в модули своих приложений. Ключевое слово exports сигнализирует компилятору о том, что перечисленные ниже функции и/или процедуры должны быть доступны из вызывающих приложений (т.е. они как бы "экспортируются" из библиотеки). Подробнее о механизме экспорта мы поговорим чуть позже.

И, наконец, в конце модуля можно увидеть ключевые слова begin и end. Внутри данного блока вы можете поместить код, который должен выполняться в процессе загрузки библиотеки. Достаточно часто этот блок остается пустым.

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

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

В дополнение к процедурам и функциям, DLL может содержать глобальные данные, доступ к которым разрешен для всех процедур и функций в библиотеке. Для 16-битных приложений эти данные существовали в единственном экземпляре независимо от количества загруженных в оперативную память программ, которые используют текущую библиотеку. Другими словами, если одна программа изменяет значение глобальной переменной a на 100, то для всех остальных приложений a будет значение 100. Для 32-битных приложений это не так. Теперь для каждого приложения создается отдельная копия глобальной области данных.





--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Altair   P-robots   18.04.2004 17:37
SKVOZNJAK   Это типа змеиных боёв?   19.04.2004 0:41
Altair   Да, только в существующих P-ROBOTS, деруться точки…   19.04.2004 10:13
EXE   У тебя уже что-нибудь написано или все с нуля начи…   25.04.2004 17:38
Altair   Все с нуля. ----- А кто здесь боиться трудностей?   25.04.2004 18:24
AlaRic   Видимо много кто раз молчат! <_<   1.05.2004 10:39
Altair   К сожалению почти все.   9.06.2004 19:40
APAL   А что это за Р-Роботс? Где можно про них инфу почи…   9.06.2004 20:17
Altair   http://pascal.sources.ru/gamestxt/probots4.htm   9.06.2004 23:11
Romtek   У тебя уже что-нибудь написано или все с нуля начи…   9.06.2004 23:18
Altair   Исходники есть, потому что я кинул ссылку, с котор…   9.06.2004 23:26
Romtek   На мой взгляд, легче будет всё таки разобраться в …   10.06.2004 0:00
Altair   Тоже верно. Если я правильно понял тебя, romtek, …   10.06.2004 1:41
Romtek   Если я правильно понял тебя, romtek, то ты хочешь …   10.06.2004 3:06
Altair   Я тоже сейчас занят. Можно отложить это до лучших …   10.06.2004 10:30
WiZarDX   если проект будет продолжен, то я тоже не прочь к …   10.06.2004 16:35
Altair   Можно и с танками. Мы же не говорим, робот-андроид…   10.06.2004 17:59
WiZarDX   согласен у меня есть идея насчет роботов! что…   14.06.2004 16:09
Romtek   что если делать не готовые скомпилированные процду…   14.06.2004 17:29
Altair   В связи с некоторыми событиями, тема оживает, и на…   10.09.2004 22:52
Gothic_Snake   В связи с некоторыми событиями, тема оживает, и н…   23.12.2005 3:46
BlackShadow   Скинул бы как проект для команды. Всё равно проста…   11.09.2004 20:42
Altair   Так и есть!   11.09.2004 20:57
FreeMan   2. программист системник скорее всего.   14.09.2004 19:45
WiZarDX   1. grafix programmer esli eto budet bez vsiakix t…   11.10.2004 13:02
GoodWind   ?? 320x200x 256 colors под dos   11.10.2004 20:20
Guest   nu pocemu, mozno dojti i do 1024x768 32bit colors.…   12.10.2004 11:45
WiZarDX   sorry, cto ne zaregistrirovalsia vnaciale... razj…   12.10.2004 11:50
Altair   Да, под ДОС.   12.10.2004 12:21
WiZarDX   togda otlicno :) esli nuzna budet grafika, to obr…   12.10.2004 12:33
Prometeus   А кто-нибудь писал непосредственно роботов под p-r…   12.10.2004 17:00
RL   Дети, хватит париться над этими мелочами. ;) По…   27.11.2004 21:01
Altair   RL, между прочим, ребенок, тут никто 16 битными и…   27.11.2004 21:07
Rl   У меня около 500Kb занимает код... А остальное муз…   27.11.2004 21:26
Altair   500 кб исходный текст кода или EXE? если второе т…   27.11.2004 21:39
RL   Исходный текст конечно. Но картинки в формате BMP.…   28.11.2004 2:29
Altair   С удовольствием. А именно: не занимайся бредом, к…   28.11.2004 2:35
RL   Спасибо за ссылку! :D Но не все мне подходит…   28.11.2004 11:48
GoodWind   тот же трабл :(   28.11.2004 12:06
Altair   А чем не устраивает Free Pascal? Можно на нем част…   28.11.2004 12:17
RL   Качать с инета очень долго, ведь он весит около 16…   29.11.2004 3:18
Guest   Разве Free Pascal позволяет работать под Windows и…   29.11.2004 3:20
GoodWind   кхы... посмотрите подменю compile->target   29.11.2004 4:42
Altair   ха-ха-ха :lol: А что нет? Или вы увидели кон…   29.11.2004 10:48
RL   охота воспроизвести MP3 в TMT Pascal. Может кто-ни…   7.12.2004 19:19
Probel   ты имеешь в виду, что можно запихнуть части grafi…   15.11.2005 23:36
Altair   мммм.. ну можно конечно... MeD что-то пробовал ..…   15.11.2005 23:41
Probel   мне б надо в TMT использовать все или почти все из…   15.11.2005 23:54
Altair   думаю поймешь что я имею ввиду.. library MyDLL; …   16.11.2005 0:02
Probel   спасибо а у нас тут где-нить на форуме про это р…   16.11.2005 0:07
Altair   вот тебе из DRKB:   16.11.2005 0:25
Altair   RE: P-robots   16.11.2005 0:26
Altair   RE: P-robots   16.11.2005 0:26
Probel   Altair, спасибки! :)   16.11.2005 1:29
Altair   Пожалуйста! Скачай DRKB не пожалеешь! :go…   16.11.2005 1:41
Probel   да, действительно классная вещь, спасибки за это …   16.11.2005 1:57
GoodWind   хм... портировать grafix по TMT что-ль.... а то из…   16.11.2005 12:28
Probel   GoodWind, давай, портируй, я рад буду :)   16.11.2005 20:57
volvo   Угу... Ты его лучше под FPC 2.0.0 сначала спортир…   16.11.2005 21:36
Altair   ставлю кефир что у него ничего не выйдет... уже п…   17.11.2005 0:23
arhimag   Люди а выставьте пожалуйста исходник первой версии…   17.11.2005 1:55
Altair   первой версии чего ??? Графикса ? на сайте ищи и …   17.11.2005 2:00
arhimag   Нет, п роботс!!   17.11.2005 2:02
Altair   http://pascal.sources.ru/gamestxt/probots4.htm   17.11.2005 2:28
Probel   а под TMT то можно пробовал кто-нить?   17.11.2005 2:37
Altair   сомневаюсь... если не получилось под тот же компи…   17.11.2005 2:51
Probel   эхх, мне б хотя бы чтоб jpeg загружать в tmt... м…   20.11.2005 22:37
GoodWind   FFC не пользую =)) портировать не буду... закончу …   21.11.2005 10:48
GoodWind   :lol: :lol: :lol: :lol: дату последнего поста …   23.12.2005 3:51
Gothic_Snake   :lol: :lol: :lol: :lol: дату последнего поста…   23.12.2005 22:00
virt   Ты ссылку дай куда выкладываете наработки.   24.12.2005 22:14
Gothic_Snake   Ты ссылку дай куда выкладываете наработки. В ско…   25.12.2005 17:56
arhimag   Я бы 3 или 4 рад быбыл поучаствовать :)))   24.12.2005 22:38
Gothic_Snake   Кстати, почему у меня не запускается проботс???   25.12.2005 18:30


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 0:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name