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

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


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

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

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


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


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


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

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

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


Цитата
Экспорт функций из DLL



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

Наиболее распространенный способ экспорта - по имени. Взглянем на приведенный ниже текст:

exports
  SayHello,
  DoSomething,
  DoSomethingReallyCool;

Следует обратить внимание на то, что Delphi автоматически назначает порядковый номер каждой экспортируемой функции (процедуре) независимо от того, определяете вы его явно или нет. Явное определение индекса позволяет вам лично управлять порядковым номером экспортируемой функции или процедуры.

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

Кроме этого, в поставку Delphi входит весьма полезная утилита tdump, которая предоставляет данные о том, какая информация экспортируется из указанной DLL.


Использование DLLProc



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

Для начала следует сказать о самой причине существования DLLProc. Динамическая библиотека получает сообщения от Windows в моменты своей загрузки и выгрузки из оперативной памяти, а также в тех случаях, когда какой-нибудь очередной процесс, использующий функции и/или ресурсы, хранящиеся в библиотеке, загружается в память. Такая ситуация возможно в том случае, когда библиотека необходима для функционирования нескольких приложений. А для того, чтобы вы имели возможность указывать, что именно должно происходить в такие моменты, необходимо описать специальную процедуру, которая и будет ответственна за такие действия. К примеру, она может выглядеть следующим образом:

procedure MyFirstDLLProc(Reason: Integer);
begin
  if Reason = DLL_PROCESS_DETACH then
    {DLL is unloading. Cleanup code here.}
end;

Однако системе совершенно не очевидно, что именно процедура MyFirstDllProc ответственна за обработку рассмотренных выше ситуаций. Поэтому вы должны поставить в соответствие адрес нашей процедуры глобальной переменной DLLProc. Это необходимо сделать в блоке begin...end примерно так:

begin
  DLLProc := @MyDLLProc;
  { Что-нибудь еще, что должно выполняться в
  процессе инициализации библиотеки }
end.

Ниже представлен код, демонстрирующий один из возможных вариантов применения DLLProc.

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

var
  SomeBuffer: Pointer;

procedure MyFirstDLLProc(Reason: Integer);
begin
  if Reason = DLL_PROCESS_DETACH then
    {DLL is выгружается из памяти.
    Освобождаем память, выделенную под буфер.}
    FreeMem(SomeBuffer);
end;

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

{Какой-нибудь код, в котором используется SomeBuffer.}

exports
  HelloWorld;

begin
  {Ставим в соответствие переменной
  DLLProc адрес нашей процедуры.}
  DLLProc := @MyFirstDLLProc;
  SomeBuffer := AllocMem(1024);
end.

Как можно увидеть, в качестве признака того или иного события, в результате которого вызывается процедура MyFirstDll, является значение переменной Reason. Ниже приведены возможные значения этой переменной.

DLL_PROCESS_DETACH
библиотека выгружается из памяти; используется один раз;
DLL_THREAD_ATTACH
в оперативную память загружается новый процесс, использующий ресурсы и/или код из данной библиотеки;
DLL_THREAD_DETACH
один из процессов, использующих библиотеку, "выгружается" из памяти.




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

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


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

 



- Текстовая версия 23.06.2025 22:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"