Главная страница
    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.46 MB
Время: 0.03 c
4-1161152894
mxc
2006-10-18 10:28
2007.03.04
как генерировать GUID


2-1171127218
bagos
2007-02-10 20:06
2007.03.04
тень формы


15-1170761971
stone
2007-02-06 14:39
2007.03.04
А был ли мальчик?


15-1170831074
vasIZmax
2007-02-07 09:51
2007.03.04
Не спам!!


2-1171181909
Alex7
2007-02-11 11:18
2007.03.04
Как использовать PickList колнки DBGrid для ввода данных выбором





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский