Главная страница
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.038 c
15-1171025514
IMHO
2007-02-09 15:51
2007.03.04
Диалоги из фильма на DVD


2-1171520607
aht
2007-02-15 09:23
2007.03.04
inner join по 3м таблицам


3-1165165267
Rav
2006-12-03 20:01
2007.03.04
TDbComboBox "наоборот"... (или правильнее TLookupDbComboBox )


2-1171183054
C@N
2007-02-11 11:37
2007.03.04
Моя прога на американском комутере....


15-1170921452
Marat
2007-02-08 10:57
2007.03.04
Проблема