Инструменты пользователя

Инструменты сайта


bbdevpackernohost

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

bbdevpackernohost [2013/12/16 16:14]
kpmy created
bbdevpackernohost [2020/10/29 07:08]
Строка 1: Строка 1:
-====== Герметизация DevPacker. ====== 
- 
-{{ :dev-packer.png?nolink |}} 
- 
-===== Проблема. ===== 
- 
-В эталоне Блэкбокса есть модуль DevPacker, он реализует функции упаковки в исполняемый файл произвольных ресурсов. Ресурсы размещаются внутри исполняемого файла по определенным правилам. Эти правила известны в модуле HostPackedFiles, который реализует фабрику Files.dir для работы с упакованными ранее файлами. 
- 
-В процессе пересмотра внутренней структуры ББ в модуле DevPacker обнаружилась негерметичность.  
-Она заключалась в прямой зависимости от HostFiles и HostPackedFiles. HostPackedFiles в свою очередь опирался на структуру данных, формируемую в DevPacker (имплицитная зависимоcть). 
-Негерметичность мешала использовать модуль в новой сборке ББ.  
- 
-Для использования DevPacker в новой сборке ББ необходимо провести герметизацию модуля.  
- 
-===== Герметизация. ===== 
- 
-При анализе содержимого модуля DevPacker выяснилось, что модуль реализует две основные функции: взаимодействие с пользователем и запись структуры и содержимого упакованных файлов. 
-Взаимодействие с пользователем приводит к формированию платформонезависимого списка файлов, который передается записывателю. 
- 
-Все работы будут производиться над копией модулей в подсистеме Packed. 
- 
-Выделим процедуры записи в модуль PackedExeWriter. Даже при отсутствии прямых зависимостей модуля от WinApi или хост-подсистемы этот модуль всё равно зависит от структуры исполняемого файла Windows. Значит, платформонезависимые модули не могут его импортировать напрямую. 
- 
-Выделим процедуры взаимодействия с пользователем в модуль PackedCmds. Так как структура FileList теперь используется модулем PackedExeWriter, сделаем её экспортированной, а для отделения функций по взаимодействию с пользователем переместим FileList в модуль PackedCore. 
- 
-Чтобы модуль Cmds мог передать список файлов на упаковку, опишем в модуле PackedCore интерфейс записывателя Writer с методом PackList, который будет реализован в PackedExeWriter. Переменная PackedCore.writer типа Writer будет доступна модулю Cmds. 
- 
-Таким образом модуль DevPacker был изолирован от любых платформозависимых модулей при сохранении своих функций, а модуль PackedCore представляет для модуля PackedCmds герметичный прикладной слой.  
- 
  
bbdevpackernohost.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)