Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 21h44   #1
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 467
Points : 143
Points : 143
Par défaut inclure un fichier binaire

Bonjour, comment inclure un fichier binaire a un projet C++ sous codeblocks ?, il s'agit de données brutes, j'ai cherché mais je n'ai pas trouvé.
Merci.
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 16h59   #2
imperio
Membre éprouvé
 
Avatar de imperio
 
Homme Guillaume Gomez
Étudiant
Inscription : mai 2010
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Gomez
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2010
Messages : 237
Points : 465
Points : 465
Je ne comprends pas qu'elle serait ton intérêt à faire ça. Si tu veux juste lire ton fichier avec ton programme il te suffit de le mettre à un emplacement précis sur ton disque dur et de donner le chemin complet à ton programme pour ensuite faire ce que tu veux.
imperio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 17h28   #3
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 570
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 570
Points : 4 156
Points : 4 156
Bonjour,

je suis à peu près parfaitement sûr que tu ne veux pas "inclure de fichier binaire" mais tout au plus "le lire".
Tu peux ajouter le fichier de ton choix dans un projet, seuls les .c et .cpp seront de toutes façons compilés.
Et pour ajouter un fichier, un simple glisser/déplacer depuis l'explorer fait l'affaire.
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 18h09   #4
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 467
Points : 143
Points : 143
En fait je veux faire une intro (demo), donc a la fin je ne dois me retrouver qu'avec un seul fichier exécutable, je pense que je vais passer par l'asm pour réussir.
Merci.
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 20h26   #5
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 467
Points : 143
Points : 143
j'ai un peu progressé dans mes recherche en utilisant ce bon vieil assembleur, en testant j'ai réussi à compiler ça :

Code :
1
2
3
4
void FONCTION() {
    __asm(
          "label: .incbin \"coords\"");
}
Maintenant le défi est de récupérer l'adresse de "label:" dans mon programme en c++.

Merci pour votre aide.
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 21h34   #6
imperio
Membre éprouvé
 
Avatar de imperio
 
Homme Guillaume Gomez
Étudiant
Inscription : mai 2010
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Gomez
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2010
Messages : 237
Points : 465
Points : 465
En fait tu veux exécuter du code contenu dans le fichier ? Si c'est une librairie il y a des fonctions pour ça, si c'est un programme compilé par contre...
imperio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 22h19   #7
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 467
Points : 143
Points : 143
Citation:
Envoyé par imperio Voir le message
En fait tu veux exécuter du code contenu dans le fichier ? Si c'est une librairie il y a des fonctions pour ça, si c'est un programme compilé par contre...
Non il y aura plusieurs données :
-des données brutes
-des graphismes
-un module de musique
mais pas de code
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 23h15   #8
Arzar
Membre Expert
 
Inscription : mai 2008
Messages : 938
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 938
Points : 1 786
Points : 1 786
L'astuce classique c'est de faire une première passe sur les fichiers que tu veux intégrer avec un programme du style bin2c (ou prog fait maison, c'est très simple à faire) qui génère à partir d'un fichier quelconque un .h contenant un énorme tableau d'unsigned char dont chaque case représente un octet du fichier en question.

Par exemple une ressource du style intro.wav après passage à la moulinette bin2c génèrera un fichier intro.h contenant un tableau du style :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#define INTRO_LEN 33792
static unsigned char intro[] =
 {
  0x4d,0x5a,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,
  0xff,0x00,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x0e,
  0x1f,0xba,0x0e,0x00,0xb4,0x09,0xcd,0x21,0xb8,0x01,0x4c,0xcd,0x21,
  0x54,0x68,0x69,0x73,0x20,0x70,0x72,0x6f,0x67,0x72,0x61,0x6d,0x20,
  // etc etc etc
};
Arzar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/01/2013, 23h17   #9
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 570
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 570
Points : 4 156
Points : 4 156
Si c'est juste pour "insérer les fichiers dans l'executable", alors tu n'as rien à faire que de déclarer des variables const unsigned char[] = {le contenu du fichier}; où le contenu du fichier sera les valeurs de chaque octet du fichier.

En tous cas je ne vois pas ce que l'assembleur t'apportera de plus.
Enfin, au final je ne vois pas du tout l'intérêt d'une telle manip faut dire, c'est bien plus simple d'avoir les données partagées et stockées dans leur fichier respectif !
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 14h00   #10
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 467
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 467
Points : 143
Points : 143
Citation:
Envoyé par Bousk Voir le message
Si c'est juste pour "insérer les fichiers dans l'executable", alors tu n'as rien à faire que de déclarer des variables const unsigned char[] = {le contenu du fichier}; où le contenu du fichier sera les valeurs de chaque octet du fichier.

En tous cas je ne vois pas ce que l'assembleur t'apportera de plus.
Enfin, au final je ne vois pas du tout l'intérêt d'une telle manip faut dire, c'est bien plus simple d'avoir les données partagées et stockées dans leur fichier respectif !
Comme je le disais plus haut, je veux faire une intro, le format de ce genre d'applications c'est un seul fichier exécutable, je vais peut être opter pour l'inclusion de tableau si je n'arrive pas a inclure directement, mais dans ce cas il faut bien que je convertisse les fichier en tableau "à la main" ?
Et il y a t-il une limite de taille pour les tableau ? (car la ça risque de faire de vraiment gros tableaux).
Merci
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 14h42   #11
imperio
Membre éprouvé
 
Avatar de imperio
 
Homme Guillaume Gomez
Étudiant
Inscription : mai 2010
Messages : 237
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Gomez
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2010
Messages : 237
Points : 465
Points : 465
La limite de ton tableau sera la limite de la mémoire que ton pc sera capable d'allouer à ton programme, en gros ta RAM, donc je ne pense pas que t'as à t'inquiéter pour ça. Par contre j'ai toujours l'impression que tu veux exécuter ce fichier. Si tel est le cas il y a des fonctions pour ça (CreateProcess sous win et fork / exec* sous unix).
imperio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h59.


 
 
 
 
Partenaires

Hébergement Web