Получение файла ресурса из exe - PullRequest
3 голосов
/ 04 марта 2010

Я обертываю файлы с помощью Visual C ++ 2008, я выяснил, как их встраивать, но не могу понять, как их получить. У меня есть некоторый опыт работы с C ++, но нет опыта работы с Win32 или Visual C ++. Целью упаковки является запуск некоторого кода, а затем, если все в порядке, он может запустить встроенный файл.

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

Некоторые из упакованных файлов будут exe, а другие будут файлами, предназначенными для запуска внешней программой.

Редактировать: Эти файлы встраиваются в файл .res, они не просто соединяются до конца исполняемого файла.

Ответы [ 2 ]

5 голосов
/ 04 марта 2010

Итак, у вас есть двоичный файл, встроенный в качестве ресурса в 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

Возможно, вы захотите добавить к этому проверку ошибок!

0 голосов
/ 04 марта 2010

Главное, что вам нужно знать (которое должно присутствовать в файле .RC, который компилируется в файл .res), - это имя ресурса. Исходя из этого, вы можете использовать FindResource и LoadResource для загрузки данных. Очевидно, вы запишите эти данные во временный файл и выполните этот файл.

...