Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
CYB3R
0 / 0 / 1
Регистрация: 09.02.2012
Сообщений: 2
1

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

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

Решил я написать простенькую программу под венду, опыта не имею. Застопорился, обращаюсь за советом. Хочу написать программу на 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".
Дело-то за малым. Осталось только написать код для извлечения ресурсов и записи их в файл. Мучал гугл весь день, ничего не помогло. Помогите нубу, пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 00:17
Ответы с готовыми решениями:

Сохранение результата в файл и извлечение
Здравствуйте! Подскажите,пожалуйста,как сделать извлечение из файла? Вот...

Компиляция файла ресурсов
Как в CodeBlocks откомпилировать файл ресурсов?

Создать текстовый файл из 5 строк, прочитать созданный файл и получить новый файл
Создать текстовый файл из 5 строк, прочитать созданный файл и получить новый...

Освобождение ресурсов при получении терминирующего сигнала
Здравствуйте уважаемые. Я только изучаю Си, и столкнулся с такой проблемой....

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

2
Black Fregat
2523 / 1281 / 349
Регистрация: 31.05.2009
Сообщений: 4,985
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
0 / 0 / 1
Регистрация: 09.02.2012
Сообщений: 2
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 и извлекать также.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2012, 22:42

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru