Помещение файла в ресурсы и извлечение его из ресурсов
Страница 2. Извлечение файла из ресурсов


 

Извлечение файла из ресурсов 

Достают конечно же не сам файл, а массив байт, который этот файл представляет. Т.е. получают указатель на начало этого массива:

    //Получаем хэндл модуля (исполняемого файла, *.exe или *.dll), в 
   // котором лежит ресурс. NULL означает модуль, ассоциированный
   //с текущим процессом, хотя в этом случае можно сразу вызывать
   //FindResource, передавая первым параметром NULL,
   // а под VCL можно использовать глобальную HInstance
   
HMODULE hMod=GetModuleHandle(NULL);
   
// если ресурс лежит в другом файле, то параметр для GetModuleHandle
   // можно получить с помощью LoadLibrary(...);
   
if(!hMod) {
       
//Обработка ошибки
   
}
   
//Получаем дескриптор информационного блока нашего ресурса
   
HRSRC hRes=FindResource(hMod,"ResurceName",RT_RCDATA);
   
//Если ResurceName не было определено как число, то ResurceName
   //берется в кавычках. Иначе надо (LPSTR)ResurceName
   //Если тип ресурса был задан как WAVE, то последний параметр должен
   // быть "WAVE" - в кавычках!
   
if(!hRes){
       
//Обработка ошибки
   
}
   
//Теперь загружаем ресурс в память, получая дескриптор загру-
   //женного блока памяти.
   
HGLOBAL hGlob=LoadResource(hMod,hRes);
   
//Опять же, для ресурса в "текущем" модуле, первым параметром можно
   //передавать NULL
   
if(!hGlob) {
       
//Обработка ошибки
   
}
   
//И, наконец, последнее - получаем указатель на начало массива
   
BYTE *lpbArray=(BYTE*)LockResource(hGlob);
   
if(!lpbArray) {
       
//Обработка ошибки
   
}

 
« Предыдущая статья   Следующая статья »