Author Topic: Données dans exe  (Read 18350 times)

0 Members and 1 Guest are viewing this topic.

Offline azerty

  • Base
    • View Profile
  • Ancienneté: 1994
  • Rôle: Code
Données dans exe
« on: 18 May 2011 à 14:34:58 »
Bonjour,

Je dois inclure des images et musiques dans un exe; sachant que celles-ci sont assez conséquentes, je voudrais avoir des infos sur la manière de procéder soit avec GCC (C::B) soit avec Visual C++.
Je sais qu'il y a les ressources sous VC, mais je ne sais pas si c'est la bonne méthode...

Merci d'avance pour vos conseils,
azerty

Offline maracuja

  • Base
    • View Profile
Re : Données dans exe
« Reply #1 on: 18 May 2011 à 14:55:20 »
Bonjour,

Pour faire simple, il existe deux formats d'executable, ceux fonctionnant sous linux, (les fichiers elf) et ceux sous windows (les fichiers pe).
Les fichiers PE permettent aisément d'avoir un espace au sein du fichier executable nommé section.
La section resource  est un espace "fourre-tout".
C'est une solution simple, élégante et facile a mettre en oeuvre.

L'autre solution "générique" est de convertir ton fichier binaire (mp3, xm, que sais-je) en un tableau exploitable par ton programme.

Ceci étant dit, il existe un article  traitant de la création d'une pseudo section resouce avec un fichier au format ELF [1]. Tu noteras que les exemples sont pour SDL mais c'est facilement transposable.



[1] http://www.xgarreau.org/aide/devel/sdl/rwops.php

Offline azerty

  • Base
    • View Profile
  • Ancienneté: 1994
  • Rôle: Code
Re : Données dans exe
« Reply #2 on: 18 May 2011 à 15:14:58 »
Bonjour maracuja,

Merci pour ta réponse rapide. Je suis en train de lire l'article; je devrais m'en sortir avec ça...

azerty

Offline LLB

  • Base
    • Pouet.net
    • Coup de coeur
    • View Profile
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : Données dans exe
« Reply #3 on: 18 May 2011 à 15:32:35 »
Pour les intros 64k, j'ai vu deux techniques :

- Les outils du genre bin2c, bin2h. C'est super simple à utiliser, mais ce n'est pas adapté pour les grosses données.

- Utiliser un fichier assembleur qui se contente de faire incbin du fichier. C'est ce que j'utilise et j'aime bien cette méthode. Il faut modifier un peu le build system pour appeler un assembleur. Quelques infos sur pouet. Si tu télécharges v2, tu peux voir comment c'est intégré dans VS dans leur exemple.

Ensuite, la méthode plus standard est d'utiliser les ressources, je ne sais pas si ça peut se faire de façon portable.

Si tes données font plusieurs Mo, je te conseille plutôt de ne pas les mettre dans le fichier exécutable (utilise un fichier à part).

nystep

  • Guest
Re : Données dans exe
« Reply #4 on: 18 May 2011 à 15:43:17 »
sous nasm, tu peux utiliser la commande incbin pour inclure tout un fichier binaire et stocker un label de début, un label de fin, la différence des deux te donne la taille des données..

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : Données dans exe
« Reply #5 on: 18 May 2011 à 16:00:04 »
Pour des petits fichiers, la méthode la plus simple et portable est quand même celle du "bin2c", en plus si tu ne disposes pas de l'outil pour ça, c'est extrêmement trivial à coder (en python par exemple, c'est une 20aine de lignes de code).

Je ne sais pas ce que les ressources apportent de plus pour les gros fichiers, à part un peu de propreté dans l'environnement de dev... Ou alors elles ne sont pas chargées en même temps que le code exécutable ?

Offline azerty

  • Base
    • View Profile
  • Ancienneté: 1994
  • Rôle: Code
Re : Données dans exe
« Reply #6 on: 18 May 2011 à 16:09:05 »
Bonjour LLB,

- Utiliser un fichier assembleur qui se contente de faire incbin du fichier. C'est ce que j'utilise et j'aime bien cette méthode. Il faut modifier un peu le build system pour appeler un assembleur. Quelques infos sur pouet. Si tu télécharges v2, tu peux voir comment c'est intégré dans VS dans leur exemple.

Je ne sais encore si la prod devra être portable ou pas, mais je trouve cette méthode ASM des plus simples. Si j'utilise VS, j'opterai pour cette solution. Merci pour l'info!

Si tes données font plusieurs Mo, je te conseille plutôt de ne pas les mettre dans le fichier exécutable (utilise un fichier à part).

Je dois encore discuter de cela avec le concepteur. Je lui soumettrai cette remarque. Quand tu dis, fichier à part, tu penses à des fichiers séparés
ou à un pak?

Personnellement, cacher les données n'est pas quelque chose qui me semble si important, mais bon... si c'est ce que le roi veut :)

Encore merci!


azerty

nystep

  • Guest
Re : Données dans exe
« Reply #7 on: 18 May 2011 à 16:18:30 »
Quote
Je dois encore discuter de cela avec le concepteur. Je lui soumettrai cette remarque.

Et donc peux-tu dire sur quel type de projet tu travailles? ;) une démo?

Offline LLB

  • Base
    • Pouet.net
    • Coup de coeur
    • View Profile
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : Re : Données dans exe
« Reply #8 on: 18 May 2011 à 16:28:46 »
Je ne sais encore si la prod devra être portable ou pas, mais je trouve cette méthode ASM des plus simples. Si j'utilise VS, j'opterai pour cette solution. Merci pour l'info!
Si tu utilises un Makefile, c'est facile aussi de lui dire comment compiler le fichier assembleur (quand tu appelles nasm ou autre, tu obtiens un fichier .o/.obj).

Quand tu dis, fichier à part, tu penses à des fichiers séparés ou à un pak?
L'un ou l'autre. Si c'est une musique mp3/ogg, tu peux la laisser à part, je trouve ça plus pratique (aussi bien pendant le dév, pouvoir modifier la musique sans recompiler, que pour l'utilisateur final). Si tu as peur qu'on te pique tes données, tu peux tout regrouper en un seul fichier (bon, ce n'est pas vraiment une protection, mais ça cache un peu).

Offline azerty

  • Base
    • View Profile
  • Ancienneté: 1994
  • Rôle: Code
Re : Données dans exe
« Reply #9 on: 18 May 2011 à 17:54:27 »
Et donc peux-tu dire sur quel type de projet tu travailles? ;) une démo?

Pas encore... Je laisse à l'initiateur du projet le soin d'annoncer la prod quand bon lui semblera ;)


Offline ok3anos

Re : Données dans exe
« Reply #10 on: 18 May 2011 à 21:06:02 »
Hmmmm.... On se connait azerty ? ;)

Concernant les fichiers .pak je m'interroge sur comment les créer et comment accéder aux données?
 Est-ce un fichier de binaires compilées/empilées?
Quelqu'un pourrait-il m'orienter?

Concernant les ziks et les graphs, j'ai déjà fait ça en incluant tout dans un fichier resources mais ce n'est utile que pour une prod ne dépassant pas 2 Mo après, mieux vaut externaliser les données. Plus pratique, plus facile à gérer et les exes "trop lourds" ce n'est pas le top.... En plus quel est vraiment l'intérêt, sachant qu'on peut de toute façon facilement hacker les données.

Offline RaHoW

  • Base
    • Pouet.net
    • View Profile
    • Apex - official site
  • Ancienneté: 1993
  • Groupe: Apex
  • Rôle: Gfx, code, orga
Re : Données dans exe
« Reply #11 on: 18 May 2011 à 21:14:02 »
Okeanos: l’intérêt c'est d'avoir un seul fichier ^^ Ça m’intéresse énormément, parce que même en faisant un incbin ou un tableau binaire, je ne vois pas trop comment "simuler" le fait de charger le fichier (autant je peux peut être modifié mon code, autant loader une track en miniFmod ou quoi de cette manière... je vois pas comment faire)...

Il me restera plus qu'un bon timer et hop ^^
=RaHoW/Apex=

Offline ok3anos

Re : Re : Données dans exe
« Reply #12 on: 18 May 2011 à 21:28:23 »
Okeanos: l’intérêt c'est d'avoir un seul fichier ^^ Ça m’intéresse énormément, parce que même en faisant un incbin ou un tableau binaire, je ne vois pas trop comment "simuler" le fait de charger le fichier (autant je peux peut être modifié mon code, autant loader une track en miniFmod ou quoi de cette manière... je vois pas comment faire)...

Il me restera plus qu'un bon timer et hop ^^

Alors quel est l'intérêt d'avoir un seul fichier ?

Si les fichiers sont inclus dans l'exe, il n'y a pas de chargement du fichier a proprement parler....... Tu les récupères juste en mémoire. Plus tu auras de fichiers inclus... plus l'exe mettra du temps a s'éxécuter. D'où l'intérêt de ne pas avoir des exes trop lourds.........

Idem pour minifmod.
Concernant minifmod c'est très simple, tu inclus plusieurs fichiers xm dans la resource et tu les appelle au moment voulu.

les fichiers externalisés sont mieux à mon avis. Sauf dans le cas d'une 64k bien sûr.

Offline RaHoW

  • Base
    • Pouet.net
    • View Profile
    • Apex - official site
  • Ancienneté: 1993
  • Groupe: Apex
  • Rôle: Gfx, code, orga
Re : Données dans exe
« Reply #13 on: 18 May 2011 à 21:37:42 »
C'est aussi histoire de pouvoir avoir un seul fichier ressource packer... ça et en 64k ça m’intéresse de toutes manières de savoir le faire.

Quand au fait de "récupérer juste en mémoire" j'ai l'impression que c'est pas si simple... je peux pas juste balancer mon tableau de datas dans un pointeur non?? Je suis forcement obliger de "shunter" le loader si y en a un??
=RaHoW/Apex=

Offline ok3anos

Re : Données dans exe
« Reply #14 on: 18 May 2011 à 21:53:40 »
La récup se fait juste par un FindResource et un LoadResource.
Tu as des tonnes d'exemples là dessus.

Mais pour les 64kb ce ne sont pas ses méthodes qui sont retenues. Pour la zik se sont les synths et pour les graphs c'est pratiquement que du procedural + shaders.
Je me suis beaucoup intéressé aux 64k pour le procedural. Toutes mes particules sont générées comme ça parce que c'est pratique.
Après, à cause du boulot et de la vie de famille je n'ai pas le temps et l'énergie nécessaire pour m'investir à fond là-dedans. On en discutait avec Ulrich/FRequency à la REVISION, ça demande un investissement considérable en temps et en énergie. Créer son framework seul c'est pas évident (surtout quand on est pas codeur à la base).