| Автор
| Сообщение |
|
|
|
Цитата |
|
var
RcInfo: HRSRC;
Rc: THandle;
Data: Pointer;
begin
RcInfo := FindResource(0,ResourceName,ResourceType);
Rc := LoadResource(0,RcInfo);
Data := LockResource(Rc);
end;
Собственно вапрос ,как его на винт то записать?? Заранее СПС |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
записать-то легко. Но нужно знать одну маленькую весчь - размер этого ресурса в памяти.
f: file;
assignfile(f, 'file.dat');
rewrite(f, 1);
blockwrite(f, data^, <размер>);
closefile(f);
Как узнать размер - вопрос риторический. Ответ как минимум зависит от типа ресурса _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
dll ки выташить надо и ехе
Добавлено спустя 33 минуты 59 секунд:
RT_RCDATA |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Тогда разумнее всего перед файлами в ресурс сохранить их размер. Например, если в первых четырех байтах хранится размер файла, это будет выглядеть примерно так:
f: file;
p: ^integer;
assignfile(f, 'file.dat');
rewrite(f, 1);
p:= data;
inc(integer(data), 4); //передвигаем указатель на 4 байта вперед - туда, где начинаются реальные данные
blockwrite(f, data^, p^);
closefile(f); _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
у меня была программа, внутри которой хранилось куча исполняемых файлов и дллек, которые по необходимости извлекались и сохранялись на винт.
так вот, для этой проги я написал универсальную функцию для извлечения бинарных данных из ресурсов и сохранения их на винт.
только у меня проблем с определением длины ресурса не возникало.
| delphi: | function TMain.SaveResourceToDisk(ResID: Integer; ResType: PChar; ResFile: string): boolean; var RS: TResourceStream; FS: TFileStream; res_data: pbyte; c: integer; res_h: cardinal; begin res_h:=FindResource(HInstance, Pchar(ResID), ResType); result:=res_h<>0; if not result then exit; try RS:=TResourceStream.CreateFromID(HInstance, ResID, ResType); FS:=TFileStream.Create(ResFile, fmCreate); res_data:=nil; try // считываем ресурс c:=RS.Size; res_data:=GetMemory(c); CopyMemory(res_data, RS.Memory, c); // сохраняем ресурс в файл FS.Write(PByte(res_data)^, c); finally if res_data<>nil then FreeMemory(res_data); RS.Free; FS.Free; end; except raise; result:=false; end; end;
|
пример использования
| delphi: | if not SaveResourceToDisk(101, RT_RCDATA, ExtractFilePath(Application.ExeName)+'extracted.exe') then ShowMessage('Ошибка извлечения ресурса!');
|
_________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| здесь класы используются ето не неда........ |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
ну посмотри как в классах реализовано.
Добавлено спустя 1 минуту 37 секунд:
всего-то и надо что заглянуть внутрь TResourceStream.Create, TResourceStream.Size и TResourceStream.Memory _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|