Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];

Вниз

Запуск приложения, хранящегося в ресурсах средствами 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 вся ветка

Форум: "KOL";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.056 c
9-1144704275
wik
2006-04-11 01:24
2007.03.04
Давайте создадим свою Game Company


2-1171358625
misere
2007-02-13 12:23
2007.03.04
Конвертация массива из byte-ов в integer


2-1171543139
Muscat
2007-02-15 15:38
2007.03.04
Файлы *.rtl . Помогите кто чем может!!!


2-1171127067
libo
2007-02-10 20:04
2007.03.04
Доступ дискам


15-1170959065
palva
2007-02-08 21:24
2007.03.04
Два человека - уже организация





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский