Fichiers en ressources - API Windows

Résolu
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006 - 18 août 2005 à 15:15
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 23 août 2005 à 09:00
salut



voilà je voudrais savoir comment mettre des fichiers en ressources du
programmes puis après pouvoir les enregistrer après (dialog enregistrer
sous...) dans un dossier . (extraire quoi) .



mici ^^

Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .

13 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2005 à 15:40
Salut,

Pour mettre un fichier en ressource, il y'a plusieurs méthodes. Je te propose la plus simple:

1- Tu ouvres le Bloc-notes pour créer un nouveau fichier texte.

2- Tu tapes ceci parexemple:

ID_FICHIER1 RT_RCDATA "c:\fichier1.ext"

Le premier élement est l'identificateur de la ressource. Le deuxième son type, binaire ici, et le troisième son chemin.

3- Tu enregistres ce texte dans le dossier de ton projet avec l'extension ".rc"

4- Tu ajoutes ce fichier au projet.

5- Après compilation tu remarqueras que ton exécutable devient plus grand car il contient la ressource.



Essaie tout ça puis je te dirai comment récupérer cette ressource puis l'enregistrer sur disque.
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2005 à 16:14
Voici un exemple pour récupérer et mettre la ressource sur disque:



// Trouver la ressource:

HRSRC Maressource=FindResource(0,"ID_FICHIER1","RT_RCDATA");

// Déterminer sa taille:

DWORD taille=SizeofResource(0,Maressource);

// Charger la ressource en mémoire:

HGLOBAL hRessource=LoadResource(0,Maressource);

// Obtenir un pointeur sur cette zone mémoire:

LPVOID pointeur=LockResource(hRessource);

// Créer le fichier destination:

HANDLE hFichier=CreateFile("c:\\fichier.ext",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);

// Copier la ressource dans le fichier:

DWORD ecrits;

WriteFile(hFichier,pointeur,taille,&ecrits,0);

// Fermer le fichier:

CloseHandle(hFichier);

// Libérer la ressource de la mémoire:

FreeResource (hRessource);
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 15:52
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450

ciao...
BruNews, MVP VC++
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
18 août 2005 à 16:02
oki , je savait mettre des bitmaps et des icônes en ressources donc c'était bon .

la suite ?

Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
18 août 2005 à 16:29
le fichier est crée mais c'est vide .



if (!Maressource) MessageBox(hWnd,"Merde","Erreur",MB_OK|MB_ICONERROR);

ce test retourne negatif donc c'est qu'il y a un problème avec la ressource (pfff)


cpp:

#include "h.h"



h:

#define FILE 100



rc:

#include "h.h"



FILE RT_RCDATA "E_DMIU01.DL_"
Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2005 à 16:41
Tu n'as pas suivi à la lettre ma méthode de création de la ressource:

Enlève #define FILE 100 de ton fichier h.h

Enlève #include "h.h" de ton fichier rc.
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
18 août 2005 à 16:44
j'ai plus l'erreur

mais fichier toujours vide

Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2005 à 16:45
Si tu ne veux rien changer à tes fichier "h.h" et "rc" tu dois alors utiliser MAKEINTRESOURCE:



HRSRC Maressource=FindResource(0,MAKEINTRESOURCE(ID_FICHIER1),"RT_RCDATA");
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
18 août 2005 à 16:48
merdassouillasse de ma part ... le fichier était vide (-_- celui de base)

il me semblait pourtant avoir vu des données dedans (quel idiot !)

+---+ test +---+

oki tout marche thanks ^^

Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2005 à 16:56
Tu n'as plus besoin de MAKEINTRESOURCE puisque tu n'as plus d'erreur.
Ca prouve que ta ressource a été trouvé. Il faut maintenant passer en
mode débogage pour vérifier les valeurs de retour des fonction
appelées. Tu peux aussi mettre cette partie de ton code ici pour voir.
Normalement tout devrait aller.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 août 2005 à 17:04
Désolé, j'ai répondu avant de rafraichir la page, j'avais pas vu ton dernier post.

C'est bon. Tu peux maintenant faire de même pour les autres fichiers à mettre en ressource.

Bonne programmation.
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
23 août 2005 à 01:47
une petite dédicace à racpp

pr féliciter sa patience et sa pédagogie

___________________________________________________________
Magicalement
Nono
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 août 2005 à 09:00
Oui c'est certain, on finirait par croire qu'il se dope au valium.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous