Содержание материала

 

Данный код не совсем красив, и отсутствует обработка ошибок. Правильнее будет создать класс, включающий в себя данный пример.

 Извлечение ресурсов из EXE

теперь рассмотрим пример, показывающий, как извлекать ресурсы из исполняемого модуля.

 Вся процедура заключается в создании потока ресурса, создании файлового потока и копировании из потока ресурса в поток файла.

Code:

procedure ExtractToFile(Instance:THandle; ResID:Integer; ResType, FileName:String);

var

ResStream: TResourceStream;

FileStream: TFileStream;

begin

try

   ResStream := TResourceStream.CreateFromID(Instance, ResID, pChar(ResType));

   try

     //if FileExists(FileName) then

       //DeleteFile(pChar(FileName));

     FileStream := TFileStream.Create(FileName, fmCreate);

     try

       FileStream.CopyFrom(ResStream, 0);

     finally

       FileStream.Free;

     end;

   finally

     ResStream.Free;

   end;

except

   on E:Exception do

   begin

     DeleteFile(FileName);

     raise;

   end;

end;

end;

 

Всё, что требуется, это получить Instance exe-шника или dll (у Вашего приложения это Application.Instance или Application.Handle, для dll Вам прийдётся получить его самостоятельно :)

 ResID тот же самый ID , который был присвоен ресурсу

 ResType WAVEFILE, BITMAP, CURSOR, CUSTOM - это типы ресурсов, с которыми возможно работать, но у меня получилось успешно проделать процедуру только с CUSTOM

 FileName - это имя файла, который мы хотим создать из ресурса

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить