Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > посоветуйте как быть


Автор: Value 23.3.2006, 12:52
Я хочу написать программу в которой было бы несколько игр ( пятнашки, сапёр, морской бой) . как сделать лучше чтобы игры были .dll или нет ?

Автор: Snowy 23.3.2006, 13:07
Тогда уж bpl. С dll размер будет немаленький...

Автор: Guedda 23.3.2006, 13:21
Да лучше exe-шниками кинуть в инсталляшку все... А потом из главной программы из взывать функцией:
Код

WinExec

Автор: Alexeis 23.3.2006, 13:29
Value, подразумевается что число игр со временем может менятся или нет smile

Автор: Value 23.3.2006, 13:33
alexeis1, да, для начала я напишу 3 игры, а потом надо будет подумать какие похожие игры попробовать написать

Автор: Демо 23.3.2006, 13:34
Цитата(Value @ 23.3.2006, 12:52 Найти цитируемый пост)
Я хочу написать программу в которой было бы несколько игр ( пятнашки, сапёр, морской бой) . как сделать лучше чтобы игры были .dll или нет ?


А какая разница? И алгоритм, и интерфейс все равно для каждой игры надо реализовывать.

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

Автор: Snowy 23.3.2006, 13:57
Если юзаешь VCL, то в данном случае BPL однозначно!
Все общие вещи вынести в отдельный свой BPL.
Каждая игра - отдельный BPL, юзающий эти вещи.
А ехешник юзает всех.
Только при таком раскладе получится минимальный размер.

Автор: Демо 23.3.2006, 16:07
Цитата(Snowy @ 23.3.2006, 13:57 Найти цитируемый пост)
Только при таком раскладе получится минимальный размер.


Так ведь BPL не только свои написанные придется таскать...

Автор: Snowy 23.3.2006, 16:24
Цитата(Демо @ 23.3.2006, 16:07 Найти цитируемый пост)
Так ведь BPL не только свои написанные придется таскать...
Ну да. Еще как минимум rtl.bpl
Но, если все делать dll'ами, то уже на второй размер превысит расходы.
Кроме того, bpl прекрасно жмутся.

Автор: Guedda 23.3.2006, 17:42
Конечно, они жмутся... Также как и dll. Так вот собственно два варианта:
1) Взять программу и сделать bpl-ки. Примерно все будет весить 2Мб
Потом поставлять дополнительные bpl-ки и все тут.
2) Взять программу, и подключать дллки, как плагины. Примерно все будет весить 600 Кб. Так зачем же тогда такой перевес?

ИМХО, нужно пользоваться дллками, как плагинами, и все будет хорошо.

Автор: Snowy 23.3.2006, 17:59
Цитата(Guedda @ 23.3.2006, 17:42 Найти цитируемый пост)
зять программу, и подключать дллки, как плагины. Примерно все будет весить 600 Кб.
Без dll'ок. Плюс каждая dll-ка по полметра...
А каждая дополнительная bpl-ка по 40-70кб...
При использовании dll, код дублируется, а для bpl - нет.
Ну-ка посчитай, что эффективнее, если плагинов штук 10...
В архиве проект на bpl с 10-ю плагинами будет в пределах метра.
P.S. bpl-ки жмутся лучше, чем dll.

Автор: Guedda 23.3.2006, 18:02
smile Да. Точно... Я что то ступил... Извиняюсь.
Ну и как же тогда изд-ки подключать динамически? Может ссылку дашь?

Автор: Snowy 23.3.2006, 18:08
LoadPackAge, UnLoadPackAge. Описание в справке дельфи.
Пример:
Код
var
  HLib:  HMODULE;
  Start: procedure;
begin
  HLib := LoadPackage(FileName);
  if HLib = 0 then Exit; // это не bpl
  Start := GetProcAddress(HLib, 'Start'); // ищем процедуру запуска
  if not Assigned(Start) then Exit; // это не наша bpl
  Start; // Запуск!
  UnloadPackAge(HLib); // выгружаем
end;

Автор: Guedda 23.3.2006, 18:14
Цитата(Snowy @ 23.3.2006, 19:08)
Код

//...
Start; // Запуск!
UnloadPackAge(HLib); // выгружаем
end;

Так что, она сразу загрузится, и выгрузится? Я что то не понимаю...

Автор: Snowy 23.3.2006, 18:48
Цитата(Guedda @ 23.3.2006, 18:14 Найти цитируемый пост)
Так что, она сразу загрузится, и выгрузится? Я что то не понимаю...
В данном примере просто показано, как ее грузить, выполнять и выгружать.
Когда она выгрузится - в данном примере зависит от процедуры Start.
Если у тебя много bpl, то можешь их все прогрузить, а хэндлы сложить в список.
При выходе из программы, соответственно все выгружаешь.

Автор: Guedda 23.3.2006, 19:05
Все... Спасибо, разобрался...

Автор: Демо 23.3.2006, 19:13
Ко всему прочему плюс у пакетов - можно совершенно спокойно один и тот же класс использовать в основной программе и в BPL.

Автор: Snowy 23.3.2006, 19:21
Цитата(Демо @ 23.3.2006, 19:13 Найти цитируемый пост)
Ко всему прочему плюс у пакетов - можно совершенно спокойно один и тот же класс использовать в основной программе и в BPL.
Не можно, а нужно!
Структура вообще должна быть такой:

1 - Главная программа (1 ехе) >>> 2 - плагины (куча bpl) >>> 3 - Общие классы, функции и прочий код(1 bpl) >>> 4 - rtl

В данной схеме:
1. ехе юзает все bpl.
2. Все плагины юзают 3-ю часть, за счет чего общие вещи не дублируются и едины для всех.
3. Никого не юзает, кроме 4.
4. - тандартные bpl (rtl, vlc) - их юзают все.
Жаль нарисовать не могу. Было бы нагляднее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)