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.
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.
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 ?
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)
Si je comprends bien, afin d'ouvrir le fichier texte à partir de la ressource de la dll, il faut que je fasse :
Avec la déclaration ressource suivante :
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");
C'est ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part textFile RCDATA "textFile.txt"
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à...
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 ?)
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...
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager