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

Вниз

Запуск приложения, хранящегося в ресурсах средствами API   Найти похожие ветки 

 
YDS   (2006-06-09 11:08) [0]

Средствами Delphi сабж реализуется посредством конструкции вида:

Res := TResourceStream.Create(Hinstance, "My.exe", Pchar(EXEFILE));
Res.SavetoFile("My.exe");

Однако при этом нужно подвязывать в uses Classes, что увеличивает размер конечного exe килобайт на 80.

Как это можно обойти средствами API или KOL?


 
ECM ©   (2006-06-09 11:23) [1]


> Как это можно обойти средствами API или KOL?


1) KOL - использовать Resource2Stream:

function Resource2Stream( DestStrm : PStream; Inst : HInst;
                         ResName : PChar; ResType : PChar ): Integer;
{* Loads given resource to DestStrm. Useful for non-standard
  resources to load it into memory (use memory stream for such
  purpose). Use one of following resource types to pass as ResType:
  |<pre>
RT_ACCELERATOR Accelerator table
RT_ANICURSOR Animated cursor
RT_ANIICON Animated icon
RT_BITMAP Bitmap resource
RT_CURSOR Hardware-dependent cursor resource
RT_DIALOG Dialog box
RT_FONT         Font resource
RT_FONTDIR Font directory resource
RT_GROUP_CURSOR Hardware-independent cursor resource
RT_GROUP_ICON Hardware-independent icon resource
RT_ICON         Hardware-dependent icon resource
RT_MENU         Menu resource
RT_MESSAGETABLE Message-table entry
RT_RCDATA Application-defined resource (raw data)RT_STRING String-table entry
RT_VERSION Version resource
  |</pre>
  |<br>For example:
  !var MemStrm: PStream;
  !    JpgObj: PJpeg;
  !......
  ! MemStrm := NewMemoryStream;
  ! JpgObj := NewJpeg;
  !......
  ! Resource2Stream( MemStrm, hInstance, "MYJPEG", RT_RCDATA );
  ! MemStrm.Position := 0;
  ! JpgObj.LoadFromStream( MemStrm );
  ! MemStrm.Free;
  !......
  }


2) API - подсмотреть реализацию функции Resource2Stream в KOL :)


 
ECM ©   (2006-06-09 11:26) [2]

З.Ы. у MemoryStream есть метод SaveToFile


 
YDS   (2006-06-09 11:46) [3]

Thks!!!!!


 
YDS   (2006-06-09 21:40) [4]

Sorry, но снова туплю :(

Задача стоит простая: взять содержимое ресурса из текущего файла и скопировать его в конец другого файла.
Делаю так:
var
pFile, MemStrm: PStream;
cFile :string; // имя файла, в который нужно записать
begin
MemStrm := NewMemoryStream;
Resource2Stream(MemStrm,HInstance,"AD",RT_RCDATA); // читаю ресурс

pFile := NewReadWriteFileStream(cFile); // открваю файл на запись
SeekFileStream(pFile, 0, spEnd); // прыгаю в его конец
WriteFileStream(pFile, MemStrm^, GetSizeMemStream(MemStrm)); // пишу

MemStrm.free;
pFile.free;
end;

В итоге, сначала в конец файла записываются какие-то 96 байт, а уж затем содержимое ресурса. Что тут не так?


 
YDS   (2006-06-09 22:05) [5]

Все, разобрался. Нужно примерно так:

var
pFile, MemStrm: PStream;
cFile :string; // имя файла, в который нужно записать
mBuffer : array[0..1929] of byte;

begin
        MemStrm := NewMemoryStream;
        Resource2Stream(MemStrm,HInstance,"AD",RT_RCDATA);
        MemStrm.Position := 0;
        MemStrm.Read(mBuffer,SizeOf(mBuffer));
        SeekFileStream(pFile, 0, spEnd);
        pFile.Write(mBuffer,SizeOf(mBuffer));
        MemStrm.free;
        pFile.free;
end;


 
RA ©   (2006-06-13 09:40) [6]

Задача стоит простая: взять содержимое ресурса из текущего файла и скопировать его в конец другого файла.
Вирусописатели непобедимы.


 
YDS   (2006-06-14 20:01) [7]


> Вирусописатели непобедимы.


Не угадал :) Просто есть консольная тулза, которой таким образом проще добавить функциональность, сделав все при этом в виде одного exe.


 
YDS   (2006-06-14 20:09) [8]

Sorry, предыдущим постом я пояснил, что хотел упаковать в ресурс exe для последующего его запуска оттуда.
А вот что касается "задачи: взять содержимое ресурса из текущего файла и скопировать его в конец другого файла", то это не для вируса, а для патчера - патчится файл путем прикручивания к нему дополнительной секции, код которой сидит в ресурсе патчера.



Страницы: 1 вся ветка

Текущий архив: 2007.03.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
6-1157962772
JMorrison
2006-09-11 12:19
2007.03.04
Утечка памяти BDS win32 Indy 10


2-1171613987
reqty
2007-02-16 11:19
2007.03.04
Доступ на запись


15-1171193812
nameless
2007-02-11 14:36
2007.03.04
Проблема с Task bar


2-1171545721
Vlad Oshin
2007-02-15 16:22
2007.03.04
Опять о cgi.. Можно ли в нем использовать ADO? как?


15-1170781538
Kolan
2007-02-06 20:05
2007.03.04
Кому там про сравнение строки надо было?