Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Membre confirmé Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    673
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 673
    Points : 216
    Points
    216

    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.

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2010
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2010
    Messages : 565
    Points : 1 145
    Points
    1 145

    Par défaut

    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.

  3. #3
    Modérateur

    Homme Profil pro Cyrille
    Network programmer
    Inscrit en
    juin 2010
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Nom : Homme Cyrille
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Network programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 2 174
    Points : 5 631
    Points
    5 631

    Par défaut

    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.

  4. #4
    Membre confirmé Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    673
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 673
    Points : 216
    Points
    216

    Par défaut

    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.

  5. #5
    Membre confirmé Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    673
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 673
    Points : 216
    Points
    216

    Par défaut

    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.

  6. #6
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2010
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2010
    Messages : 565
    Points : 1 145
    Points
    1 145

    Par défaut

    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...

  7. #7
    Membre confirmé Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    673
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 673
    Points : 216
    Points
    216

    Par défaut

    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

  8. #8
    Membre Expert

    Inscrit en
    mai 2008
    Messages
    1 009
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 1 009
    Points : 2 199
    Points
    2 199

    Par défaut

    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
    };

  9. #9
    Modérateur

    Homme Profil pro Cyrille
    Network programmer
    Inscrit en
    juin 2010
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Nom : Homme Cyrille
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Network programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 2 174
    Points : 5 631
    Points
    5 631

    Par défaut

    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 !

  10. #10
    Membre confirmé Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    673
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 673
    Points : 216
    Points
    216

    Par défaut

    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

  11. #11
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2010
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2010
    Messages : 565
    Points : 1 145
    Points
    1 145

    Par défaut

    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).

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •