[beendet]Ressourcen in die ausführbare Datei hinein kompilieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 6713
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [beendet]Ressourcen in die ausführbare Datei hinein kompilieren

Beitrag von Mathias »

Ehrlich gesagt wird mir das ganze zu kompliziert bzw. ist mir den ganzen Aufwand nicht Wert.
Das Programm läuft ohnehin, das Einkompilieren der Ressourcen hätte alles nur ein wenig abgerundet.
Es gibt noch einen einfachen bequemen Weg deine Dateien direkt in dein Programm rein zu kompilieren.

Zuerst behandelst du deine Datei mit folgendem Kommando.

Code: Alles auswählen

hexdump -v -e '16/1 "$%02X, " "\n"' xxx.bin > xxx.txt
Dies gibt die Binäri als Zahlen-Reihe aus, die dann so aussieht $00, $00, .... $00

Diese Zahlenreihe bindest du einfach als Konstante ein.

Code: Alles auswählen

const
  audio: array of byte = (
  $49, $44, $33, $03, $00, $00, $00, $00, $07, $76, $54, $49, $54, $32, $00, $00,
  .....
  $AA, $AA);  
Da die Konstanten recht gross werden, so wie bei meiner Test MP3 mit über 230'000 Zeilen, würde ich für jede Datei eine Unit nehmen.

Im Programm selbst sieht es nicht komplizierter aus, als wen man es von einer Datei lädt.

Code: Alles auswählen

  var
    music: PMix_Music;
    stream: PSDL_IOStream;
  begin
    SDL_Init(SDL_INIT_AUDIO);
    Mix_OpenAudio(0, nil);

    stream := SDL_IOFromConstMem(Pointer(audio), Length(audio));

    music := Mix_LoadMUS_IO(stream, True);
    if music = nil then begin
      WriteLn('error music: ', Mix_GetError);
    end;

    Mix_PlayMusic(music, -1);

    ReadLn;

    SDL_CloseIO(stream);   
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 904
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: [beendet]Ressourcen in die ausführbare Datei hinein kompilieren

Beitrag von PascalDragon »

Mathias hat geschrieben: Mo 2. Dez 2024, 15:54 Zuerst behandelst du deine Datei mit folgendem Kommando.

Code: Alles auswählen

hexdump -v -e '16/1 "$%02X, " "\n"' xxx.bin > xxx.txt
Dies gibt die Binäri als Zahlen-Reihe aus, die dann so aussieht $00, $00, .... $00

Diese Zahlenreihe bindest du einfach als Konstante ein.

Code: Alles auswählen

const
  audio: array of byte = (
  $49, $44, $33, $03, $00, $00, $00, $00, $07, $76, $54, $49, $54, $32, $00, $00,
  .....
  $AA, $AA);  
Da die Konstanten recht gross werden, so wie bei meiner Test MP3 mit über 230'000 Zeilen, würde ich für jede Datei eine Unit nehmen.
Wenn man schon diese Variante macht, dann könnte man es sich ja noch einfacher machen und das mit FPC mitgelieferte data2inc nutzen, welches dies quasi in einem Schritt macht. ;)
FPC Compiler Entwickler

Antworten