Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.26;
Скачать: CL | DM;

Вниз

подключить ресурс (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 делать.

в проекте стоит $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 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
2-1277818230
Ulyana
2010-06-29 17:30
2010.09.26
Уважаемые знатоки, подскажите по массивам -


6-1226291905
Publ
2008-11-10 07:38
2010.09.26
Скрыть HTTP_REFERRER


2-1277971578
Nickolay
2010-07-01 12:06
2010.09.26
Русификация


15-1277890295
ocean
2010-06-30 13:31
2010.09.26
Интеграция AD с внешней почтой


6-1226523473
Yozch1
2008-11-12 23:57
2010.09.26
Учесть в программе используемый в системе Proxy