Получение файла ресурса из exe
Я обертываю файлы с помощью Visual C++ 2008, я выяснил, как их встраивать, но не могу понять, как их получить. У меня есть некоторый опыт работы с C++, но нет опыта работы с Win32 или Visual C++. Целью упаковки является запуск некоторого кода, а затем, если все в порядке, он может запустить встроенный файл.
Я упаковываю много разных файлов, поэтому повторное использование кода является ключевым, и во всех случаях я не буду знать имя внедренного файла. Но я мог бы назвать exe-файл так же, как упакованный файл, поэтому, если программа может получить имя самого себя, это тоже сработает.
Некоторые из упакованных файлов будут exes, а другие будут файлами, предназначенными для запуска внешней программой.
Редактировать: Эти файлы встраиваются в файл.res, они не просто объединяются до конца исполняемого файла.
2 ответа
Итак, у вас есть двоичный файл, встроенный в качестве ресурса в EXE, и вы хотите прочитать файл?
Попробуйте что-то вроде этого (очень грубо, найдите правильные параметры в MSDN):
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(id), type);
HGLOBAL hGlobal = LoadResource(NULL, hResource);
BYTE* pData = (BYTE*)LockResource(hGlobal);
int size = SizeofResource(NULL, hResource);
// ... do something with pData and size, eg write to disk ...
FreeResource(hGlobal); // done with data
Вы хотите добавить некоторые проверки ошибок в этом!
Главное, что вам нужно знать (которое должно присутствовать в файле.RC, который компилируется в файл.res), - это имя ресурса. Из этого вы можете использовать FindResource
, а также LoadResource
загрузить данные. Вы, очевидно, запишите эти данные во временный файл и выполните этот файл.