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