![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
подключить ресурс (zip архив)
12 © (2010-06-29 17:23:00)правильно делаю?
Resource := LoadResource(hInstance,
FindResource(hInstance, 'MyText', 'TEXT'));
FS := tFileStream.Create( Resource );
с тем, чтоб сохранить его потом где-то, тоже как файл zip
Anatoly Podgoretsky (2010-06-30 13:59:00) [1]> RWolf (30.06.2010 09:09:05) [5]
Не очевидно, а очевидно SaveToFile
12 (2010-06-30 11:26:00) [2]> [13] Leonid Troyanovsky © (30.06.10 11:09)
ясно
спасибо
все получилось
Leonid Troyanovsky (2010-06-30 11:09:00) [3]
> 12 © (30.06.10 10:53) [11]
Я не пойму, зачем так много приседаний.
http://www.dore.ru/perl/nntp.pl?f=1&gid=8&mid=28106
Ресурсный скрипт .rc подключается к проекту путем Shift-F11
--
Regards, LVT.
12 (2010-06-30 11:05:00) [4]ExtractToFile(hInstance, 333, 'RT_RCDATA', 'RNR2.ZIP');
Access violation at address 0040950C in module 'Project1.exe'. Read of address 0000014D
12 (2010-06-30 10:53:00) [5]в таком виде
ExtractToFile(hInstance, 333, RT_RCDATA, 'RNR2.ZIP');
ошибка
Access violation at address 004042E7 in module 'Project1.exe'. Read of address 0000000A
сразу на строке ExtractToFile(, не входя в процедуру, если по F7 исполнять
внутри @LStrFromPChar если CPU смореть
Leonid Troyanovsky (2010-06-30 10:34:00) [6]
> 12 © (30.06.10 10:15) [8]
> ExtractToFile(application.Handle, 333, 'CUSTOM', 'RNR2.
> ZIP');
Какой на application.Handle - HInstance.
И не 'CUSTOM', а RT_RCDATA.
--
Regards, LVT.
12 (2010-06-30 10:30:00) [7]если переписать так
ExtractToFile(application.Handle, 333, 'CUSTOM', 'RNR2.ZIP', 'RNR.RES');
procedure ExtractToFile(Instance:THandle; ResID:Integer; ResType, FileName:String; ResName:string = '');
var
ResStream: TResourceStream;
FileStream: TFileStream;
begin
try
// ResStream := TResourceStream.CreateFromID(Instance, ResID, pChar(ResType));
ResStream := TResourceStream.Create(Instance,ResName,pAnsiChar(ResType));
то ругается - Resource RNR.RES not found
подскажите, как мне этот ресурс все-таки сохранить?
12 (2010-06-30 10:15:00) [8]почему у меня в приведенном примере,
http://desksoft.ru/index.php?drkb=202&id=1615&str_path=0|126|147|202&w
ошибка AV выскакивает?
Вызываю
ExtractToFile(application.Handle, 333, 'CUSTOM', 'RNR2.ZIP');
До этого было
CreateResourceFile('RNR.zip','RNR.RES',333);
успешно, файл RNR.RES создался, размером равный как если через brcc32 делать.
в проекте стоит $R
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R RNR.RES}
//---------------------------------------------------------------
procedure ExtractToFile(Instance:THandle; ResID:Integer; ResType, FileName:String);//---------------------------------------------------------------
var
ResStream: TResourceStream;
FileStream: TFileStream;
begin
try
ResStream := TResourceStream.CreateFromID(Instance, ResID, pChar(ResType)); //AV ..at 0040950C.. read of ..0000014D ..
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;
procedure CreateResourceFile(
DataFile, ResFile: string; // имена файлов
ResID: Integer // id ресурсов
);
var
FS, RS: TFileStream;
FileHeader, ResHeader: TResHeader;
Padding: array[0..SizeOf(DWORD)-1] of Byte;
begin
{ Open input file and create resource file }
FS := TFileStream.Create( // для чтения данных из файла
DataFile, fmOpenRead);
RS := TFileStream.Create( // для записи файла ресурсов
ResFile, fmCreate);
{ Создаём заголовок файла ресурсов - все нули, за исключением
HeaderSize, ResType и ResID }
FillChar(FileHeader, SizeOf(FileHeader), #0);
FileHeader.HeaderSize := SizeOf(FileHeader);
FileHeader.ResId := $0000FFFF;
FileHeader.ResType := $0000FFFF;
{ Создаём заголовок данных для RC_DATA файла
Внимание: для создания более одного ресурса необходимо
повторить следующий процесс, используя каждый раз различные
ID ресурсов }
FillChar(ResHeader, SizeOf(ResHeader), #0);
ResHeader.HeaderSize := SizeOf(ResHeader);
// id ресурса - FFFF означает "не строка!"
ResHeader.ResId := $0000FFFF or (ResId shl 16);
// тип ресурса - RT_RCDATA (from Windows unit)
ResHeader.ResType := $0000FFFF
or (WORD(RT_RCDATA) shl 16);
// размер данных - есть размер файла
ResHeader.DataSize := FS.Size;
// Устанавливаем необходимые флаги памяти
ResHeader.MemoryFlags := $0030;
{ Записываем заголовки в файл ресурсов }
RS.WriteBuffer(FileHeader, sizeof(FileHeader));
RS.WriteBuffer(ResHeader, sizeof(ResHeader));
{ Копируем файл в ресурс }
RS.CopyFrom(FS, FS.Size);
{ Pad data out to DWORD boundary - any old
rubbish will do!}
if FS.Size mod SizeOf(DWORD) 0 then
RS.WriteBuffer(Padding, SizeOf(DWORD) -
FS.Size mod SizeOf(DWORD));
{ закрываем файлы }
FS.Free;
RS.Free;
end;
12 (2010-06-30 09:44:00) [9]Спасибо!
antonn (2010-06-30 09:21:00) [10]http://desksoft.ru/index.php?drkb=202&id=1615&str_path=0|126|147|202&w
пойдет?
RWolf (2010-06-30 09:09:00) [11]
> а на основе, никак не соображу, как ресурс тупо сохранить
> на диск
загрузить ресурс в память и записать содержимое на диск, очевидно же.
12 (2010-06-30 08:38:00) [12]> > правильно делаю?
> нет
почему то сам догадался :)
> TResourceStream?
надо посмотреть, спасибо
> Переведи на русский
Хочу сделать батник, чтоб архивировалось все в папке разработки, brcc32 <полученный_архив>, dcc32 <программа>
а в программе уже написана линковка ресурса, и секретная комбинация манипуляций, чтоб прилинкованный ресурс сохранялся на диск
Чтоб не искать исходники
каждая программа будет их содержать в себе.
Собственно, все могу - только с ресурсами никогда не связывался до этого
http://articles.org.ru/docum/resurs.php
сделал все что там написано, получилось
а на основе, никак не соображу, как ресурс тупо сохранить на диск
Юрий Зотов (2010-06-29 18:52:00) [13]Почему бы не использовать TResourceStream?
Anatoly Podgoretsky (2010-06-29 18:41:00) [14]> 12 (29.06.2010 17:23:00) [0]
Переведи на русский конец предложения, после где то,
Игорь Шевченко (2010-06-29 17:35:00) [15]
> правильно делаю?
нет