Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
Внизподключить ресурс (zip архив) Найти похожие ветки
← →
12 © (2010-06-29 17:23) [0]правильно делаю?
Resource := LoadResource(hInstance,
FindResource(hInstance, "MyText", "TEXT"));
FS := tFileStream.Create( Resource );
с тем, чтоб сохранить его потом где-то, тоже как файл zip
← →
Игорь Шевченко © (2010-06-29 17:35) [1]
> правильно делаю?
нет
← →
Anatoly Podgoretsky © (2010-06-29 18:41) [2]> 12 (29.06.2010 17:23:00) [0]
Переведи на русский конец предложения, после где то,
← →
Юрий Зотов © (2010-06-29 18:52) [3]Почему бы не использовать TResourceStream?
← →
12 © (2010-06-30 08:38) [4]> > правильно делаю?
> нет
почему то сам догадался :)
> TResourceStream?
надо посмотреть, спасибо
> Переведи на русский
Хочу сделать батник, чтоб архивировалось все в папке разработки, brcc32 <полученный_архив>, dcc32 <программа>
а в программе уже написана линковка ресурса, и секретная комбинация манипуляций, чтоб прилинкованный ресурс сохранялся на диск
Чтоб не искать исходники
каждая программа будет их содержать в себе.
Собственно, все могу - только с ресурсами никогда не связывался до этого
http://articles.org.ru/docum/resurs.php
сделал все что там написано, получилось
а на основе, никак не соображу, как ресурс тупо сохранить на диск
← →
RWolf © (2010-06-30 09:09) [5]
> а на основе, никак не соображу, как ресурс тупо сохранить
> на диск
загрузить ресурс в память и записать содержимое на диск, очевидно же.
← →
antonn © (2010-06-30 09:21) [6]http://desksoft.ru/index.php?drkb=202&id=1615&str_path=0|126|147|202&w
пойдет?
← →
12 © (2010-06-30 09:44) [7]Спасибо!
← →
12 © (2010-06-30 10:15) [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 делать.
в проекте стоит $Rvar
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 10:30) [9]если переписать так
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
подскажите, как мне этот ресурс все-таки сохранить?
← →
Leonid Troyanovsky © (2010-06-30 10:34) [10]
> 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:53) [11]в таком виде
ExtractToFile(hInstance, 333, RT_RCDATA, "RNR2.ZIP");
ошибка
Access violation at address 004042E7 in module "Project1.exe". Read of address 0000000A
сразу на строке ExtractToFile(, не входя в процедуру, если по F7 исполнять
внутри @LStrFromPChar если CPU смореть
← →
12 © (2010-06-30 11:05) [12]ExtractToFile(hInstance, 333, "RT_RCDATA", "RNR2.ZIP");
Access violation at address 0040950C in module "Project1.exe". Read of address 0000014D
← →
Leonid Troyanovsky © (2010-06-30 11:09) [13]
> 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:26) [14]> [13] Leonid Troyanovsky © (30.06.10 11:09)
ясно
спасибо
все получилось
← →
Anatoly Podgoretsky © (2010-06-30 13:59) [15]> RWolf (30.06.2010 09:09:05) [5]
Не очевидно, а очевидно SaveToFile
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c