Извлечение ресурсов в файл - C (СИ)
Формулировка задачи:
Решил я написать простенькую программу под венду, опыта не имею. Застопорился, обращаюсь за советом. Хочу написать программу на C, которая бы извлекала ресурсы из себя.
Собираю таким образом:
res.rc:
res.h:
app.c:
Суть программы: после запуска рядом с исполняемым файлом должны появится ещё и "voina_i_mir.txt" и "myimage.bmp".
Дело-то за малым. Осталось только написать код для извлечения ресурсов и записи их в файл. Мучал гугл весь день, ничего не помогло. Помогите нубу, пожалуйста!
$ i486-mingw32-windres res.rc -o res.o $ i486-mingw32-gcc app.c res.o -o app.exe
#include "res.h" IDR_IMG BITMAP "hearts.bmp" IDR_TXT README "README"
#define IDR_IMG 0x0001 #define IDR_TXT voina_i_mir
#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; }
Решение задачи: «Извлечение ресурсов в файл»
textual
Листинг программы
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);