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++ Discussion :

Chargement de ressources


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2010
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Par d�faut Chargement de ressources
    Bonjour � tous,

    Cette question ne concerne pas forc�ment le langage C++, mais ayant cru comprendre que certains langages fournissent des m�canismes de chargement de ressources (java), et que je cherche une solution adapt�e au C++, ce forum m'a paru le plus adapt�.

    Il s'agit d'une question que je me pose depuis fort longtemps, � laquelle je n'ai jamais trouv� de r�ponse.

    Imaginons un programme (�crit en C++ par exemple ), qui a besoin de charger des fichiers au runtime. Typiquement, une image, un fichier de description de th�me, bref, une ressource quelconque...

    Quelles sont les moyens existants, ou bonnes pratiques, pour rendre un programme conscient de son path d'installation ?
    Par exemple, imaginons que ce programme soit distribu� sur une distribution linux qui place les fichiers de ressources dans /usr/share/monprog/. Le programme va alors chercher ses ressources dans /usr/share/monprog/.
    Si l'on avait pr�f�r� installer le programme dans le prefix /usr/local ou /opt , il faudrait bien s�r que le programme trouve ses ressources aux endroits ad�quats.

    La question que je me pose alors est de savoir comment le programme peut faire les bons open() ou autres, bref, comment consid�rer ces chemins de ressources dans un programme que l'on veut distribuer. Quelles sont les bonnes fa�ons de faire ? Est-ce du ressort du packager de faire ce qu'il faut ? Ou bien le d�veloppeur doit avoir pr�par� le terrain en amont ?

    Je ne sais pas si mes propos sont clairs, j'esp�re

    Merci d'avance pour vos r�ponses

  2. #2
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    En g�n�ral, on n'utilise pas le nom complet.
    Par exemple, ce code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::ifstream fs("fichier.txt");
    ouvrira le fichier "fichier.txt" dans le r�pertoire d'installation (enfin, �a d�pend, mais il me semble que c'est ce qui est utilis� en g�n�ral ...)

  3. #3
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    En g�n�ral tu te moques bien du path d'installation.
    Tu utilises le path relatif � partir de celui o� est ex�cut� le programme.

    > C:/user/ou/je/veux/pgm.exe
    > C:/user/ou/je/veux/resources/img.png

    > ouvrir resources/img.png
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2010
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Par d�faut
    Merci beaucoup pour vos r�ponses,
    C'est en g�n�ral comme �a que je m'y prends, effectivement (chemin relatif � l'emplacement de l'ex�cutable)

    Pourtant, sur les syst�mes unix-like, on a souvent ce sch�ma l� :
    ex�cutable : $prefix/bin/monprog
    ressources : $prefix/share/monprog/

    Dans ce cas, j'ai du mal � voir comment charger les fichiers proprement, un open(../share/monprog/) relativement � l'emplacement du binaire ex�cutable semblerait faire l'affaire, mais est-ce la bonne fa�on de proc�der ?
    N'est-il pas pr�f�rable, d'une mani�re ou d'une autre, de pouvoir dissocier l'emplacement de l'ex�cutable et l'emplacement des ressources ? De mani�re � faire un open($resource_path/maressource.res), ou quelque chose de ce go�t, quelque soit l'emplacement de l'ex�cutable ?

  5. #5
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Auquel cas il y a une solution : le script ./configure ou le CMakeLists.txt (ou autre, je ne vais pas faire de la discrimination).

    En gros, il faut qu'� la compilation, un de ces scripts fasse un #define BASE_PATH "/usr/local" dans un fichier pr�-configur�.
    En gros, il n'y a pas de moyen totalement portable, mais il est possible de reposer sur le syst�me de compilation.

    Par exemple, CMake propose un moyen de "configurer" un fichier. De m�moire, �a implique de mettre un fichier comme config.hpp.in avec quelque chose comme #define BASE_PATH @base_path@, de d�finir la variable base_path dans CMake (il faudrait v�rifier, �a doit �tre accessible dans les variables pr�d�finies de CMake), puis d'appeller une fonction comme configure (nom � v�rifier) sur le fichier, et d'include le fichier config.hpp (g�n�r� par CMake) en consid�rant qu'il contient le #define BASE_PATH.

    J'esp�re avoir �t� clair !

    EDIT : Un exemple (non test�, il peut �tre n�cessaire d'ajouter des guillemets autour de @CMAKE_INSTALL_PREFIX@) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    // main.cpp
    #include "config.hpp"
     
    #include <fstream>
     
    int main(int, char**) {
      std::ifstream(BASE_PATH "/share/file"); // Auto string concat : "a" "b" == "ab"
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    // config.hpp.in
    #ifndef CONFIG_HPP
    #define CONFIG_HPP 1
     
    #define BASE_PATH @CMAKE_INSTALL_PREFIX@
     
    #endif // CONFIG_HPP
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    // CMakeLists.txt
    // Tout le bazar
    configure_file(config.hpp.in config.hpp @ONLY)
    // Tout le reste du bazar

  6. #6
    Membre averti
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2010
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Par d�faut
    Oui, �a me para�t clair
    Merci beaucoup pour cette r�ponse, le simple fait que tu �voques cette solution me rassure un peu.
    Je pense pouvoir marquer ce fil comme r�solu, je me sens un peu moins paum� sur le sujet, merci encore pour �a

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me de chargement des ressources statiques
    Par dims455 dans le forum Servlets/JSP
    R�ponses: 3
    Dernier message: 13/03/2013, 09h15
  2. Chargement de ressources dans un jar externe
    Par SQUAL dans le forum Langage
    R�ponses: 1
    Dernier message: 13/01/2012, 16h51
  3. Chargement des ressources en d�but d'application
    Par womannosky dans le forum Langage
    R�ponses: 7
    Dernier message: 11/07/2008, 17h05
  4. Probl�me de chargement de ressource
    Par ggounouman dans le forum Applets
    R�ponses: 4
    Dernier message: 23/10/2007, 16h21
  5. [BP7] Problème chargement de ressource dans une DLL
    Par Alcat�z dans le forum Turbo Pascal
    R�ponses: 11
    Dernier message: 26/07/2003, 21h36

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