Страница 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) { //Обработка ошибки }
|