Помещение файла в ресурсы и извлечение его из ресурсов - Извлечение файла из ресурсов
ОГЛАВЛЕНИЕ
Страница 2 из 3
Извлечение файла из ресурсов
Достают конечно же не сам файл, а массив байт, который этот файл представляет. Т.е. получают указатель на начало этого массива:
//Получаем хэндл модуля (исполняемого файла, *.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) {
//Обработка ошибки
}