Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
CYB3R
1

Извлечение ресурсов в файл

13.02.2012, 00:17. Показов 1892. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил я написать простенькую программу под венду, опыта не имею. Застопорился, обращаюсь за советом. Хочу написать программу на C, которая бы извлекала ресурсы из себя.
Собираю таким образом:
Код
$ i486-mingw32-windres res.rc -o res.o
$ i486-mingw32-gcc app.c res.o -o app.exe
res.rc:
C
1
2
3
#include "res.h"
IDR_IMG BITMAP "hearts.bmp"
IDR_TXT README "README"
res.h:
C
1
2
#define IDR_IMG 0x0001
#define IDR_TXT voina_i_mir
app.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
#include "res.h"
 
int WINAPI WinMain( HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPSTR lpszCmdLine,
            int nCmdShow)
{
    MessageBox(NULL, "Сейчас извлеку все нужные файлы...", "EpicFail", 0);
 
    //код для извлечения ресурсов
 
    MessageBox(NULL, "Нифига я не извлёк :(", "EpicFail", 0);
    return 0;
}
Суть программы: после запуска рядом с исполняемым файлом должны появится ещё и "voina_i_mir.txt" и "myimage.bmp".
Дело-то за малым. Осталось только написать код для извлечения ресурсов и записи их в файл. Мучал гугл весь день, ничего не помогло. Помогите нубу, пожалуйста!
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2012, 00:17
Ответы с готовыми решениями:

C# Извлечение из ресурсов
Есть бинарный файл в ресурсах, его нужно извлечь,далее с ним работает программа потом файл...

Извлечение ресурсов
Программа хранит в себе dll файл и при запуске распаковывает его в C:\speed.dll но в чём-то ошибка...

Извлечение из ресурсов
Подскажите как мне извлечить картинку из ресурсов. Гуглил читал понял только то что надо...

Извлечение ресурсов на WinApi
Добрый день! Требуется помощь. Пытаюсь извлечь из ресурсов три файла. Компиляция проходит успешно....

2
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
13.02.2012, 00:33 2
C++
1
2
3
4
    HRSRC R1 = FindResource(NULL, Name, Type);
    HGLOBAL R2 = LoadResource(NULL, R1);
    LPVOID M = LockResource(R2);
    DWORD L = SizeofResource(NULL, R1);
Записать в файл L байт по адресу M сможете?
0
CYB3R
13.02.2012, 22:42 3
С записью постараюсь сам разобраться, да и тут на форуме много тем про это.
А вот переменная Type меня несколько смущает. Насколько я понимаю, мне всегда нужно ставить RT_RCDATA, а не RT_BITMAP. Верно?

Добавлено через 10 часов 43 минуты
Цитата Сообщение от Black Fregat Посмотреть сообщение
Записать в файл L байт по адресу M сможете?
Всё-таки не сумел. Размер файла до упаковки 952486. После извлечения при помощи Resource Hacker - такой же. Внутри в программе:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    HRSRC R1 = FindResource(NULL, MAKEINTRESOURCE((int)IDR_IMG), RT_BITMAP);
    HGLOBAL R2 = LoadResource(NULL, R1);
    LPVOID M = LockResource(R2);
    DWORD L = SizeofResource(NULL, R1);
 
    printf("Size: %d \n", L);
    printf("Real: %d \n\n\n", sizeof(M));
 
    HANDLE  fp = CreateFile("tmp.bmp", GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
                CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
 
    DWORD size;
 
    if(fp != INVALID_HANDLE_VALUE) {
        WriteFile(fp, &M, L, &size, NULL);
        FlushFileBuffers(fp);
        CloseHandle(fp);
    }
    printf("Written: %d", size);
Выдаёт:
Код
Size: 952472
Real: 4


Written: 0
Пару раз удавалось получить Written: 8, появлялся файл в 4 байта с таким содержанием:
Код
00000000  28 00 00 00                                       |(...|
00000004
Добавлено через 15 минут
Глупый я. Указатель не нужен, без него всё работает.
Код
Size: 952472
Real: 4


Written: 952472
Только такой файл ничем не открывается и меньше оригинала.

Добавлено через 3 часа 52 минуты
Всё. Разобрался. Нужно было экспортировать ресурс, как RCDATA и извлекать также.
13.02.2012, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2012, 22:42
Помогаю со студенческими работами здесь

Извлечение ресурсов из .exe файла
Я хочу создать программу которая извлекала бы ресурсы из exe файла. И записывала бы в переменную....

Извлечение сжатых ресурсов из EXE
Есть exe-шник, часть ресурсов в котором закодирована zlib-ом. При помощи PEiD+KANAL получил адрес...

Извлечение из ресурсов до запуска формы
Вообщем проблема вот в чем: софт не запускается без dll, которая лежит в ресурсах. Можно ли оттуда...

Извлечение файлов из ресурсов в папку
Как можно извлечь файлы из ресурсов программы, в папку с приложением? Нужно для создания патча...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru