![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Alexey68 |
|
|||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Привет всем.
Может плохо искал, но так ничего подробного не нашёл. Интересует программное создание секции из массива данных. Как это выглядит схематично по пунктам? Есть ли у кого примеры или ссылки с подробным описанием? p.s. с pe форматом знаком. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Я как-то делал, только зачем? В моем случае - это было добавление некоторой информации в PE по классам C++, которой не предоставляли штатные средства компилятора: чтобы предки могли что-то знать о своих потомках. И эта добавка внедрялась только на этапе сборки проекта.
В целом - неперспективное занятие, ибо сильно специализировано под конкретное использование модели ООП. Это сообщение отредактировал(а) GremlinProg - 3.11.2013, 07:54 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alexey68 |
|
|||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
GremlinProg, можно на стадии компиляции добавить заголовочный файл с набором байт и обращаться к нему когда будет необходимость (на данный момент так и есть), но тогда мне придётся зависеть от компилятора и постоянно создавать заголовочный файл и т.п., а я хочу программно добавлять секцию с данными и не зависеть от компилятора
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Для дополнительных данных приложения существует секция ресурсов, в нее штатно можно добавить любой файл. В этом плане, создание дополнительной секции в PE равнозначно изобретению колеса. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alexey68 |
|
|||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
>>Для дополнительных данных приложения существует секция ресурсов, в нее штатно можно добавить любой файл.
в уже готовый exe?, размер данных постоянно разный >>В этом плане, создание дополнительной секции в PE равнозначно изобретению колеса мне как необходимо создание дополнительной секции, у Вас есть материалы по этому вопросу? Это сообщение отредактировал(а) Alexey68 - 3.11.2013, 13:21 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, в уже готовый exe ) Добавлено через 1 минуту и 26 секунд смотрите документацию: Adding, Deleting, and Replacing Resources Добавлено через 6 минут и 43 секунды не понял -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alexey68 |
|
|||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
то есть я имею ввиду что имеем 2 файла, один исполняемый другой например pdf, затем третьей программе указываем 1 (exe) и второй pdf и после чего в ресурсы 1го файла будет добавлен pdf.
Как это выполнить программно? |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Добавьте сначала в исходное приложение ресурс RT_RCDATA, например так: http://msdn.microsoft.com/en-us/library/wi...9(v=vs.85).aspx , в нем будет лежать pdf.
После этого напишите аналог этого рпимера: http://msdn.microsoft.com/en-us/library/wi...ating_Resources, только вместо lpResLock передавайте адрес буфера, в котором лежит pdf. p.s.: тип ресурса и его идентификатор должны совпадать в обоих приложениях -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alexey68 |
|
||||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Создал файл вида:
и сохранил его под именем myres.rc, подключил его к проекту: project-add to project (в c++ builder 2007) как теперь я могу обращаться к массиву данных (расположенных в файле ресурсов) из приложения?
в этом примере я получаю адрес (hRes) на начало файла ресурсов, но как получить начало массива данных? Это сообщение отредактировал(а) Alexey68 - 3.11.2013, 17:40 |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
1. FindResource 2. LoadResource 3. LockResource -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Alexey68 |
|
||||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Спасибо за помощь, интересует теперь как загрузить масиив байт в ресурсы exe'шника, так не получается, что у меня тут неправильно?:
сам файл ресурсов имеет вид:
Это сообщение отредактировал(а) Alexey68 - 5.11.2013, 11:19 |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
пока, на первый взгляд, не выполнено вот это условие:
Добавлено через 1 минуту и 53 секунды т.е его нарушает загрузка образа через LoadLibrary, зачем это вообще? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alexey68 |
|
||||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
С добавлением разобрался:
после этого открываю с помощью ресторатора и там находится заменённый мной ресурс в папке RC_DATA ресурс resname. Далее при попытке доступа к массиву байт добавленного мной выше, я получаю нулевой адрес ресурса хотя ресурс на самом деле додбавлен, использую этот код:
но массив байт на самом деле имеется, в чём может быть ошибка всё вроде правильно?... to: GremlinProg >>как успехи? С помощью приведённого мной выше кода не могу получить доступ к массиву Это сообщение отредактировал(а) Alexey68 - 10.11.2013, 04:45 |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
как успехи?
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |