Комментарии 7
Есть вартант упаковать все мелкие файлы в один большой zip, и при загрузке извлекать нужный из архива.
0
Насколько я помню, основная причина введения EXE формата была не совсем для того «чтобы загружать его в произвольное место в памяти», а ограничение 64 килобайта для COM. Всё остальное мы получили «бонусом».
А вообще вы — отчаянные оптимисты. Используя древние средства разработки, да ещё и самостоятельно модифицированные, вы тем не менее с уверенностью смотрите в будущее. Так закладываются бомбы — один разработчик правит линковщик, потом на проект приходит другой разработчик, достаёт неправленную версию и получает граблями по лбу.
По идее это хороший пример того, где надо заранее провести стресс тестирование на предмет исследования лимитов. Скорее всего проблема настигла вас внезапно и на переезд на более современные средства или на 64 бита (где, возможно, этого ограничения нет) просто не было времени.
А вообще вы — отчаянные оптимисты. Используя древние средства разработки, да ещё и самостоятельно модифицированные, вы тем не менее с уверенностью смотрите в будущее. Так закладываются бомбы — один разработчик правит линковщик, потом на проект приходит другой разработчик, достаёт неправленную версию и получает граблями по лбу.
По идее это хороший пример того, где надо заранее провести стресс тестирование на предмет исследования лимитов. Скорее всего проблема настигла вас внезапно и на переезд на более современные средства или на 64 бита (где, возможно, этого ограничения нет) просто не было времени.
+5
Очень странный вы выбрали способ хранения файлов своего формата (ресурсы имели бы смысл если нужны файлы типа как есть известные и ожидаемые windows среди ресурсов (картинки курсоры формочки с кнопочками и т.п.)… реально переинженерили.
Затем преодолевая невероятные трудности, требуя дорогие навыки (отладка и модификация бинарников), совершая подвиги, решили, попутно заложив бомбу замедленного действия в будущем (лет через 5 поддерживать ваш код будет еще сложнее, ведь патченная dll может перестать быть совместимой с самой ОС, а специалиста, способного повторить может уже не быть.
А решение уже описывали ранее на хабре, данные нужно хранить там где они должны — в секции .data (.rodata) приложения
Затем преодолевая невероятные трудности, требуя дорогие навыки (отладка и модификация бинарников), совершая подвиги, решили, попутно заложив бомбу замедленного действия в будущем (лет через 5 поддерживать ваш код будет еще сложнее, ведь патченная dll может перестать быть совместимой с самой ОС, а специалиста, способного повторить может уже не быть.
А решение уже описывали ранее на хабре, данные нужно хранить там где они должны — в секции .data (.rodata) приложения
+3
Используйте промышленную библиотеку sqlite3.dll и положите статические данные в ее файл БД. Не пожалеете.
+4
А возможно ли сейчас EXE-шнику что-то исправлять в самом себе? Конкретно — свои настройки или вообще код, чтобы не хранить настройки в отдельном файле. Современные ОС позволяют ли такое?
0
Разумеется позволяют. Правда, это зависит от того, как редактор связей оформляет секции в exe-файле, например:
Object table:
# Name VirtSize RVA PhysSize Phys off Flags
-- -------- -------- -------- -------- -------- --------
01 .PROGRM 00A64F00 00001000 00A64F00 00000200 E8000020 [CEPRW]
02 .rsrc 00324200 00A66000 00324200 00A65200 42000040 [DIR]
03 .reloc 0002D3F0 00D8B000 0002D3F0 00D8A200 42000040 [DIR]
Key to section flags:
C - contains code
D - discardable
E - executable
I - contains initialized data
P - may not be paged
R - readable
W - writeable
Здесь программа может исправлять свои коды и данные (здесь и данные также пишутся в одну секцию с кодами). А вот "ресурсы" здесь неизменяемые, как и таблица настроек.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как увеличить ресурсы в десять раз