// Хидеры программы #include <windows.h> #include <iostream.h>
// 1001 - число идентификатора в исполняемом файле (как и в resource.h у проекта // исполняемого файла simple.dll) #define IDR_JPEG1 1001
// Ф-ция для извлечения ресурса bool ExtractMyJpeg() {
// Инициализируем переменные HRSRC hRes = 0; HGLOBAL hData = 0; LPVOID pData;
// Загружаем исполняемый файл (в данном случае dll) HMODULE hModule = LoadLibrary("simple.dll"); // Если не удалось загрузить исполняемый файл, то выходим if(hModule == NULL) return false;
// Находим ресурс в исполняемом файле, указав идентификатор и тип ресурса // (в примере это "JPEGs"), hRes = FindResource(hModule, MAKEINTRESOURCE(IDR_JPEG1), "JPEGs"); // Если ресурс не найден, то выходим if(hRes == NULL) { // Освобождаем исполняемый файл FreeLibrary(hModule); return false; }
// Получаем размер ресурса для того, чтобы сохранить его в файл DWORD dwSize = SizeofResource(hModule,hRes); // Если не смогли получить размер, то выходим if(dwSize == NULL) { // Освобождаем исполняемый файл FreeLibrary(hModule); return false; }
// Загружаем ресурс hData = LoadResource(hModule, hRes); // Если не смогли загрузить, то выходим if(hData == NULL) { // Освобождаем исполняемый файл FreeLibrary(hModule); return false; }
// Фиксируем ресурс в памяти и получаем указатель на первый байт ресурса pData = LockResource(hData); // Если не удалось зафиксировать ресурс, то выходим if(pData == NULL) { // Освобождаем исполняемый файл FreeLibrary(hModule); return false; }
// Создаём файл, в который будем писать HANDLE File = CreateFile("data.jpg",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_ALWAYS,0,0); // Если не удалось создать файл, то выходим if(File == INVALID_HANDLE_VALUE) { // Освобождаем исполняемый файл FreeLibrary(hModule); return false; }
// Переменная для ф-ции записи в файл DWORD Written=0;
// Записываем весь ресурс в файл if(WriteFile(File,pData,dwSize,&Written,0)==NULL) { // Освобождаем исполняемый файл FreeLibrary(hModule); // Закрываем хендл файла CloseHandle(File); return false; }
// Закрываем хендл файла CloseHandle(File); // Освобождаем исполняемый файл FreeLibrary(hModule); return true; }
int main() { // Если не удалось извлечь ресурс, то сообщаем об ошибке if(!ExtractMyJpeg()) { // Сообщаем об ошибке cout << "Error No " << GetLastError() << endl; } return 0; }
|