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

Windows Discussion :

Ressource texte ?


Sujet :

Windows

  1. #1
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut Ressource texte ?
    Bonjour,

    Ma question est toute simple : comment insérer un fichier texte en ressource (d'une dll), et le lire par la suite durant l'exécution ? Peut-on le modifier ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Salut,

    Pour un logiciel sans éditeur de ressources, je suis un peu out, et je ne saurais pas trop te dire les détails.

    Sache toutefois que tu dois utiliser un type de ressources personnalisé (en effet, tu peux mettre n'importe quoi en ressources), et le charger avec FindResource(), LoadResource() et LockResource().

    Par contre, il me semble qu'il n'y a aucun moyen de dé-charger un fichier ainsi chargé durant l'exécution du programme: Il reste en mémoire jusqu'à ce que l'exe ou la DLL qui le contient soit déchargé(e) (et encore, si ça se trouve, ça ne suffit pas et ça reste carrément jusqu'à la fin du process).

    PS: Pour ton autre projet (le player), il faudrait qu'on puisse un minimum en discuter sur messagerie instantanée. Tu as MSN ?

  3. #3
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Merci. Oui, j'ai msn. J'ai vu que tu m'avais rentré comme contact, donc on en discutera bientôt.

    Fin du hors sujet

    Pour les ressources, je compte juste utiliser le fichier texte en ressource de la dll pour récupérer des infos... bref, au début du programme et puis c'est tout.

    En tout cas, je vais jeter un coup d'oeil du côté de ces fonctions.

    Je suppose que le sujet est donc clôs => Sujet résolu. (on verra en pratique)

  4. #4
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Si je comprends bien, afin d'ouvrir le fichier texte à partir de la ressource de la dll, il faut que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE *textFile = fopen(LockResource(LoadResource(LoadLibrary("Draw.dll"), FindResource(LoadLibrary("Draw.dll"), "textFile", RT_RCDATA))), "r");
    Avec la déclaration ressource suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textFile RCDATA "textFile.txt"
    C'est ça ?

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Houlà...

    Déjà, tout sur une ligne, ça fait mal aux yeux.

    Ensuite, si tout ce que tu cherches à mémoriser est une chaîne de rien du tout, ce n'est pas une ressource personalisée que tu dois utiliser: C'est une String Table...


    Moi, je croyais que c'était le contenu du fichier texte que tu voulais stocker en ressource, par exemple pour le générer s'il n'est pas là...

  6. #6
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    En fait, j'aimerais accéder, d'une manière ou d'une autre, à des informations entrées à la compilation de la dll. Normalement, ce sont des couples de nombres, mais une string fera l'affaire (avec sscanf bien utilisé, ça devrait aller).

    Je vais me renseigner, merci.

    Edit: Mon code ci-dessus n'aurait pas marché : fopen attend le chemin d'accès au fichier, et non une espèce de handle (c'est vrai ça, en faisant ça, quel est le type obtenu dans le LPVOID ?)

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    LockResource() retourne un pointeur vers les données brutes de la ressource.

    Enregistrer ces données dans un fichier, par exemple, on peut passer ce pointeur à fwrite().

    Mais pour les StringTables, je n'en connais pas le format brut. Il est souvent plus intéressant d'utiilser LoadString(), bien qu'il n'y ait aucun moyen de connaître à l'avance la taille de buffer à réserver : On ne peut que faire des chargements successifs en testant à chaque fois si le buffer est complètement rempli ou non...

  8. #8
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Merci, j'ai vu que LoadString() était plus approprié. Et puis, c'est plus simple à marquer en ressources que d'insérer le fichier en ressources.

    Au niveau de la taille buffer, je ne devrais pas avoir de problèmes : les buffers ne contiendront que des couples de nombres, récupérables avec scanf() par exemple.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2012, 14h09
  2. Lecture d'une ressource texte
    Par Kikouyou1080 dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/09/2010, 04h50
  3. [Lazarus] Lire une ressource texte
    Par koolkris dans le forum Lazarus
    Réponses: 4
    Dernier message: 21/10/2007, 13h52
  4. Réponses: 5
    Dernier message: 16/07/2005, 01h01
  5. [DLL] Gestions des ressources textes (StringTable)
    Par Clorish dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2005, 17h50

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