![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SAVe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 15.10.2007 Репутация: нет Всего: нет |
Здравствуйте.
Есть такая проблема: Есть готовый ехе файл. Для его работы нужны справочники которые генерируются из БД в виде XML файлов. Нужно каким то образом засунуть их в сам ехе файл. Ну и естественно он должен при запуске прочитать эти данные. Хотелось бы записать это в ресурсы . Подскажите пожалуйста как это сделать? Где можно найти информацию по фомату ехе файла (где код , где ресурсы , где данные)? |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
даже если у Вас получится засунуть данные в ехе файл(в чом сомневаюсь). Вам придется еще править код! те программа должна знать откуда брать Ваши данные.
ИМХО "не ищите легких путей" |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
На самом деле этот вариант не такой уж и страшный. Я им пользовался. В программе заводим переменную целого типа, в которую вносим размер exe-шника в байтах. После компиляции сверяем правильность её значения; если оно не такое, то исправляем и перекомпилируем - от этого размер программы не меняется. Внутри программы открываем сам exe-шник через fopen или что-нибудь подобное (GetModuleFileName поможет нам получить путь к нему) и читаем данные, начиная с указанной позиции. Осталось не забыть приклеить данные сзади к exe-шнику. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
вопрос на засыпку: что делать если исходников у вас нет? |
|||
|
||||
| SAVe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 15.10.2007 Репутация: нет Всего: нет |
Спасибо Peter . Я то же склонялся к именно такой реализации. Смущает только вот что - не загрузятся ли данные которые я приклею в сегмент кода или данных ?
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
SAVe, не совсем понятно что вы хотите:
сначала вы говорите что Есть готовый ехе файл потом вы говорите что метод подходит и последнее: если генерируются данные из БД - как часто вы будете извращатся таким способом - засовывая данные в ехе ? |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Об этом речи не было.
С какой стати? EXE-шник сам по себе останется нетронутым. Если сзади что-то приклеить, в работе программы ничего не собьётся. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| chaos |
|
||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
Это сообщение отредактировал(а) chaos - 8.11.2007, 12:48 |
||||
|
|||||
| SAVe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 15.10.2007 Репутация: нет Всего: нет |
Извините если немного некорректно обЪяснил...
Внесу некоторую ясность.
Имеется ввиду что я сам его собираюсь сделать (т.е. исходники будут). Но данные с которыми он работает (XML справочники) могут меняться. Клиенту же (их много) нужно выдать только ехе , а не ехе и набор XML файлов. Поэтому делать это (брать данные из базы и дописывать в ехе) прийдётся часто. Если же дописанные данные на работе ехе файла никак не отразятся - то это вполне подходящий вариант. Если кто знает как всё это добро (XML справочники) засунуть в ресурсы ехе файла или изменить сегмент данных программы - расскажите как . И если кто в курсе где посмотреть формат ехе файла ,то же киньте ссылочку пожалуйста. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
SAVe, в комплекте с твоей средой разработки должен поставляться компилятор ресурсов. Найди формат RC файлов (исходник ресурсного). Там все достаточно просто. тебе нужно будет из XML делать RC, затем RC скомпилировать в RES, и RES прилинковать к программе во время сборки.
Имхо, проще воспользоваться WinRAR. Создаешь SFX архив и пишешь простейший скрипт на языке этого WinRAR SFX, который после распаковки запустит твою прогу, а после завершения удалит все за собой. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
См. функции BeginUpdateResource, UpdateResource и EndUpdateResource Для доступа - как обычно LoadResource |
|||
|
||||
| SAVe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 15.10.2007 Репутация: нет Всего: нет |
Пошел по по пути использовнаия BeginUpdateResource, UpdateResource и EndUpdateResource.
Сделал 2 ехе файла ехе1 и ехе2. Один (ехе1) содержит ресурс который нужно обновить. Второй файл (ехе2) пытается при старте обновить этот ресурс в файле ехе1. Всё отрабатывае. Все проверки показывают что обновление прошло удачно. Но ресурсы файла ехе1 почему то не обновляются. Почему ? Что не так делаю ? Попутно ещё вопрос - как достать пустой ресурс ? Т.е. если в нём пусто он не отображается на вкладке resources. Хотя имеет ID (только чека выставлена unused). Функция FindResource его не находит. Как его сделать используемым ? |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Телепатов нет - код на бочку, будем изучать
|
||||||
|
|||||||
| SAVe |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 15.10.2007 Репутация: нет Всего: нет |
Привожу код:
В ехе1 просто читаю ресурс (предварительно добавил его конечно т.е. он не пустой):
Текст выводится. В ехе2 делаю так (в ехе2 содержится свой ресурс IDR_XML1 который я пытаюсь записать в ехе1):
Вроде бы всё благополучно проходит. Реально же при старте ехе1 выводится испорченный текст ресурса (дописана к исходному тексту какая то ерунда). При установке в функции BeginUpdateResource (..., TRUE) файл ехе1 просто портится и не стартует. Проверяю сам код файла exe1 (test.exe). Там в конец файла дописан правильный текст. Но за ним куча какого то левого текста PADDINGX |
||||
|
|||||
| xvr |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Согласно Талмуду (MSDN) чтение ресурса должно проводится так:
Кроме того, параметр lpData функции UpdateResource:
|
||||||||||||||
|
|||||||||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |