IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Composant qui intègre plusieurs fichier à un seul exe


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut Composant qui intègre plusieurs fichier à un seul exe
    Bonjour à tous,

    Je suis actuellement à la recherche d'un composant qui permet d'intégrer plusieurs document dans l'application, par exemple, je voudrais mettre dans mon .exe un fichier zip, un fichier bmp et un fichier ini. Ça ferait à peu près comme un fichier compresser sauf que la, ce fichier, serait l'application, (le .exe) qui contiendrait ces fichiers.

    J'ai déjà trouver un composant qui faisait exactement cela, mais il ne semble pas vouloir fonctionner. C'était fileStorage.

    Merci d'avance,
    Cordialement.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    ca va probablement etre bete ce que je vais dire mais tu pourrai les inserer en tant que ressources non ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Non ce n'est pas bête du tout, j'y est pensé mais je ne crois pas que l'on puisse extraire cet ressource sous forme de fichier après, pour l'utiliser...

    Merci de la réponse rapide
    Cordialement.

    EDIT

    J'ai même l'impression que ça ne fonctionne pas, je viens seulement de m'apercevoir que la taille de l'exe une fois compiler avec un fichier de 13 mo en ressource ne pèse que 450ko

    Donc je pense que même si je n'ai pas d'erreur quand je l'ajoute, il ne l'ajoute pas quand même.

    Cordialement

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    j avais codé y a longtemps un programme qui ecrivait des truc en fin de fichier

    Fait une recherche sur les EOF si la methode te semble intéressante.

    Le principe est simple : tu ecrit tes fichiers a la fin de ton exe (tu peux utiliser un stub si tu le souhaite).

    Perso j'utilisai ca poour de petits paramètres mais ca doit etre possible de faire cela pour des fichiers plus imposant.

    EDIT: tu peux essayer de renommer le fichier que tu veut integrer en .rc et de l integrer tel quel mais je sais pas si ca marchera :/)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Je viens d'essayer de l'ajouter avec d'autres extensions, tels que .rc, .res, .lib, .idl
    mais aucune de ces 4 ne fonctionnent, il me sors une erreur comme quoi il y a un problème dans le fichier (logique).

    Je vais essayer de les rajouter au bout, mais le programme se lancera quand même ???

    Cordialement

  6. #6
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut !

    Le fichier .rc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RESSOURCE1 RCDATA TOTO.zip
    Puis tu ajoute ce fichier .rc au projet.

    et ce qui concerne le codage de l'éxraction de ce fichier depuis ton application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #include <mmsystem.h>
     
     
     
     
    TResourceStream *Ressource=new TResourceStream((int)HInstance,"RESSOURCE1",RT_RCDATA);
     
    Ressource->SaveToFile("C:\\TOTO1.zip");//Extraire la rexxource depuis l'exe jusqu'au C:\\
     
     
    delete Ressource;

    Bonne continuation !

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    excellent !!!

    Merci bcp

  8. #8
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut

    N'oublie pas de mettre


    Bonne chance !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Merci c'est parfait !!

    Merci beaucoup !!

    Cordialement.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Je ne comprends pas pourquoi ce code m'extrait 4 fois la même ressource (la ressource 1) ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    TResourceStream *Ressource=new
     
    TResourceStream((int)HInstance,"RESSOURCE1",RT_RCDATA);
    Ressource->SaveToFile("D:\\ress1.exe");//Extraire la rexxource depuis l'exe jusqu'au C:\\
     
    TResourceStream((int)HInstance,"RESSOURCE2",RT_RCDATA);
    Ressource->SaveToFile("D:\\ress2.exe");//Extraire la rexxource depuis l'exe jusqu'au C:\\
     
    TResourceStream((int)HInstance,"RESSOURCE3",RT_RCDATA);
    Ressource->SaveToFile("D:\\ress3.exe");//Extraire la rexxource depuis l'exe jusqu'au C:\\
     
    TResourceStream((int)HInstance,"RESSOURCE4",RT_RCDATA);
    Ressource->SaveToFile("D:\\ress4.zip");//Extraire la rexxource depuis l'exe jusqu'au C:\\
     
    delete Ressource;
    J'ai pourtant mis ça dans le code de mon .rc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RESSOURCE1 RCDATA res1.exe
    RESSOURCE2 RCDATA res2.exe
    RESSOURCE3 RCDATA res3.exe
    RESSOURCE4 RCDATA res4.zip

  11. #11
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour , ton code comporte une erreur
    ci-joint la correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     TResourceStream *Ressource;
     
        Ressource=new TResourceStream((int)HInstance,"RESSOURCE1",RT_RCDATA);
        Ressource->SaveToFile(Respath+(AnsiString)("\\res1.zip"));
        delete Ressource;
        Ressource=new TResourceStream((int)HInstance,"RESSOURCE2",RT_RCDATA);
        Ressource->SaveToFile(Respath+(AnsiString)("\\res2.zip"));
        delete Ressource;
        Ressource=new TResourceStream((int)HInstance,"RESSOURCE3",RT_RCDATA);
        Ressource->SaveToFile(Respath+(AnsiString)("\\res3.zip"));
        delete Ressource;
        Ressource=new TResourceStream((int)HInstance,"RESSOURCE4",RT_RCDATA);
        Ressource->SaveToFile(Respath+(AnsiString)("\\res4.zip"));
        delete Ressource;
    d'autre part ajouter des fichiers <exe> ou <zip> en tant que ressource dans une application provoque plus de problèmes qu'elle n'apporte de solutions

    en effet si tu ajoute a ton applicatif pour par exemple 3 Mb de resource, la
    consommation mémoire de ton application sera 3 Mb plus élevée que la conmsomation propre de ton application et ceci à chaque utilisation


    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Bonjour,

    Merci beaucoup de la réponse et de l'aide en même temps !

    J'ai effectivement remarqué qu'en ajoutant 60mo à l'application, elle met un certain temps à se lancer après avoir effectué un double clic.
    Y aurait-il une solution, tel que éviter de charger ou de mettre en mémoire les ressources au lancement de l'application ?

    Cordialement

  13. #13
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Tu peux mettre les resources dans une DLL que tu charges quand tu en as besoin seulement!

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Salut,

    L'idée ma l'air très bonne, mais je vois pas comment je pourrait m'y prendre, si tu pouvait expliquer un peu plus les étapes...

    Merci d'avance !
    Cordialement.

  15. #15
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Tu fais une DLL normal et tu inclus les ressources

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <windows.h>
    #pragma resource "Mes_Ressources.RES"
    //---------------------------------------------------------------------------
    //   Important note about DLL memory management when your DLL uses the
    //   static version of the RunTime Library:
    //
    //   If your DLL exports any functions that pass String objects (or structs/
    //   classes containing nested Strings) as parameter or function results,
    //   you will need to add the library MEMMGR.LIB to both the DLL project and
    //   any other projects that use the DLL.  You will also need to use MEMMGR.LIB
    //   if any other projects which use the DLL will be performing new or delete
    //   operations on any non-TObject-derived classes which are exported from the
    //   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
    //   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
    //   the file BORLNDMM.DLL should be deployed along with your DLL.
    //
    //   To avoid using BORLNDMM.DLL, pass string information using "char *" or
    //   ShortString parameters.
    //
    //   If your DLL uses the dynamic version of the RTL, you do not need to
    //   explicitly add MEMMGR.LIB as this will be done implicitly for you
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
       return 1;
    }
    //---------------------------------------------------------------------------

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Bonsoir,

    Merci d'abord, mais en faisant ça, j'obtiens une erreur de lieur (je rappelle que ma ressource est en réalité en fichier exe de 16mo)
    J'ai essayé en faisant là technique qui m'a été donné au début à savoir on créer un fichier .rc où l'on met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RESSOURCE1 RCDATA ressource.exe
    Puis on ajoute ce fichier au projet (ici, à la DLL).

    Jusque là, ça passe sans problème, la DLL de sortie fait bien 16mo, le fichier à donc été ajouté.

    Mais lorsque je fait une nouvelle application et essaie d'intégrer la DLL (en faisant Project->Add to Project1...), là, il compile sans problème et montre que la DLL est présente dans le projet mais le fichier de sortie ne dépasse pas les 400ko, il n'a donc pas intégré là DLL, mais alors, qu'en a-t-il fait ? Peut être il créer simplement un lien entre les deux, ne l'intègre pas, alors comment faire pour qu'elle fasse partie du .exe ?

    Merci à tous pour votre aide !
    Cordialement.

  17. #17
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    La DLL ne doit pas faire partie du projet. C'est une librairie que tu charges quand tu en a besoin. L'idée est d'avoir seulement le strict minimum dans ton exe.

    Normalement tu ne dois pas ajouter la DLL au projet, sa ne sert à rien. Elle dois seulement être distribuer avec le exe.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Mais dans ce cas, je serrait obliger de transporter la DLL à coté de l'exe si je veux utiliser la ressource situé dans la DLL n'est-ce pas ?

    Si c'est ça, alors ça ne résout en rien mon problème vu qu'il reste deux fichiers au final alors que je voudrais qu'il n'en reste q'un seul, le fichier exe !

    Si il y a donc une solution pour intégrer une ressource dans un exe et la déployer après grâce à une fonction de l'exe, je suis preneur !

    Merci d'avance !
    Cordialement.

  19. #19
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Pourquoi tu n'utilises pas un programme d'instalation, il compresse tout dans un seul exe et quand tu l'installe il y a plusieurs fichiers sur le disque dur dans C:\Program Files\...

    Il y a une discussion à ce sujet si tu es preneur:
    http://www.developpez.net/forums/sho...d.php?t=249620

    Sinon je crois que tu es oubligé d'utiliser la méthode de tout mettre dans le EXE et tu obtiens un exe de plusieurs Mo

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Citation Envoyé par Crayon
    Sinon je crois que tu es oubligé d'utiliser la méthode de tout mettre dans le EXE et tu obtiens un exe de plusieurs Mo
    C'est ce que je souhaite faire
    D'ailleurs, j'ai plus ou moins réussi à intégré des fichiers dans l'exe et de les déployés mais le problème est qu'au démarrage de l'application, il met même les ressources dans la mémoire tampon !

    Si il y a un moyen d'éviter ça, ça me donnera la solution complète...

    Cordialement.

Discussions similaires

  1. Composant qui exécute plusieurs requêtes
    Par sinoun dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 10/06/2015, 15h13
  2. [XL-2010] Classeur qui compile plusieurs fichiers
    Par yaya.gaga dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2014, 15h00
  3. Une seule ListView pour plusieurs fichier php qui renvoie des données JSON
    Par max8392 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 22/08/2014, 10h46
  4. [Menu contextuel] une application qui intercepte plusieurs fichiers
    Par SpecialCharacter dans le forum Windows
    Réponses: 2
    Dernier message: 26/08/2009, 07h32
  5. [XML][Java] parser plusieurs fichiers en un seul arbre DOM ?
    Par mrlenul dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/11/2005, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo