Получение файла ресурса из 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 загрузить данные. Вы, очевидно, запишите эти данные во временный файл и выполните этот файл.

Другие вопросы по тегам