avk013.blogspot.com - другой мой блог "C# and etc"

четверг, 28 мая 2020 г.

Lazarus, C#, Delphi: пользовательские DLL, др. файлы в исполняемый файл

Lazarus порадовал...Проект-Параметры проекта-Ресурсы.....добавить
а в коде...
procedure extract_();
var
  S: TResourceStream;
  F: TFileStream;
begin //распаковка архиватора если его нет
if not FileExists(base_dir+'7z.exe') then
begin
S := TResourceStream.Create(HInstance, '7Z', RT_RCDATA);
try   // create a file mydata.dat in the application directory
   F := TFileStream.Create(ExtractFilePath(ParamStr(0)) + '7z.exe', fmCreate);
   try
     F.CopyFrom(S, S.Size); // copy data from the resource stream to file stream
   finally
     F.Free; // destroy the file stream
   end;
 finally
   S.Free; // destroy the resource stream
 end;end;end;
====

В C# стандартным способом является использование утилиты от microsoft ILMerge.
НО она не всегда срабатывает (не соотв.типы данных разл.платформ)

Delphi, без редактора ресурсов, очень старый велосипед:
Пишем в блокноте RC-файл, куда прописываем все нужные нам программы, например:
ARJ EXEFILE C:\ARHIVERS\ARJ.EXE
2. Компилируем его в ресурс при помощи Brcc32.exe. Получаем RES- файл.
3. Далее в тексте нашей программы:
implementation
{$R *.DFM}
{$R test.res} //Это наш RES-файл
// Процедура для извлечения ресурса в указанный файл
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// Записывает в текущую папку arj.exe
ExtractRes('EXEFILE', 'ARJ', 'ARJ.EXE');
end;

Комментариев нет:

Отправить комментарий