Interrogation

Signaler
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003
-
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003
-
est-il possible d'ajouter des fichiers au projet, qui lors de la compilation seront compris dans l'executable, pouvoir les copier ensuite dans un autre repertoire ?
si oui, comment procéder ?
merci d'avance

10 réponses

Messages postés
47
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
9 juin 2004

je crois qu'on peut integrer en ressource n'importe quel type de fichier.
Pendant la compilations, les resources sont integrees a l'executable.
Et pendant l'execution, des fonctions API (je me souviens plus lesquells, cf MSDN) peuvent charger la ressource en memoire, et ensuite on peut sauvegarder ces donnees comme d'hab avec les fonctions de file i/o...

Bon c'est pas tres precis, mais il manque juste les noms de fonction, non?
--anthraxx
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

c'est bien ce que je pensais
si qqn connait les fonctions a utiliser, merci de m'en faire part.
de mon coté je vais aller fouiller ds msdn
merci de ta reponse
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Pas très clair tout ca. Tu veux ajouter à un projet (quel format ? VC++ ?) des fichiers qui ne sont pas présents dans le dossier du projet ?

Kaid - kaid.fr.st
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Ok, j'ai compris ce que tu veux faire. Copier-coller de la MSDN:

call FindResource or FindResourceEx with the resource name to get the resource handle;
call LoadResource with the resource handle to get the global handle;
call LockResource with the global handle to get a pointer to the resource data.

Kaid - kaid.fr.st
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

Projet vc++
ce que je veux faire, c'est ajouter a mon prog en .exe des fichiers (en ressource), pour qu'il n'y est qu'un seul fichier au final.

ensuite il faudrait que je puisse "extraire ces fichiers" (ou copier tt simplement sur le disque dur), pour en faire qqchose apres

on peut comparer cela a la compression de plusieurs fichiers qui n'en donne qu'un seul, sauf que la je ne cherche pas a les compresser mais seulement a les inclures dans mon exe

j'espere que c'est + clair maintenant
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Oui j'ai compris suite à la réponse d'anthraxx.
Voir ma réponse ici$

Kaid - kaid.fr.st
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

dans le cas d'une application console, ca fonctionne correctement ?
comment utilise t'on les fonctions que tu m'a indiqué ?je ne suis pas encore a l'aise avec les handles... si tu as l'adresse de msdn avec ces fonctions ( et si il y a des exemples) ce n'est pas de refus
Messages postés
47
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
9 juin 2004

Bon l'adresse MSDN des fonctions je sais pas car j'ai tout MSDN sur mon disque dur (tres pratique). Mais l'essentiel:

--------------------------------------

HRSRC FindResource(
HMODULE hModule, // module handle
LPCTSTR lpName, // pointer to resource name
LPCTSTR lpType // pointer to resource type
);

hModule, c'est simple, c'est le handle de ton fichier executable. Tu le retrouve avec GetModuleHandle("blabla.exe")

lpName c'est le nom de ta resource (une chaine)
lpType le type de la ressource: tu peux utiliser la constante "RT_RCDATA Application-defined resource (raw data)"

--------------------------------------

HGLOBAL LoadResource(
HMODULE hModule, // resource-module handle
HRSRC hResInfo // resource handle
);

hModule: C pareil qu'en haut
hResInfo: le resultat de la fonction precedente

--------------------------------------

LPVOID LockResource(
HGLOBAL hResData // handle to resource to lock
);

hResData: le resultat de la fonction precedente

--------------------------------------

exemple (non testé):
HMODULE hModule=GetModuleHandle(argv[0]);

char *lpFileData=LockResource(LoadResource(hModule,FindResource(hModule,"monfichier",RT_RCDATA)));

// bon voila, il manque un peu de cleanup mais bon...
// là t'as un joli pointeur vers le premier octet de ton fichier
// ya plus qu'a sauver octet par octet avec une fonction
// genre fwrite ou WriteFile
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Oui, sans problème.

Tu dois importer une ressource sous Visual C++, par exemple un fichier texte. Il te demande de donner le type de cette ressource (ici RC_UTILISATEUR) puis tu spéficies l'identifiant (ici IDR_RC_TXT).

Ensuite tu utilises le code suivant pour récupérer un pointeur vers le contenu de la ressource et la taille.

HRSRC hRes=FindResource(NULL, MAKEINTRESOURCE(IDR_RC_TXT), "RC_UTILISATEUR");

HGLOBAL hGbl=LoadResource(NULL, hRes);

// Récupérer un pointeur void sur la ressource (à caster)
void* buffer=LockResource(hGbl);

// Récupérer la taille de la ressource en octets
DWORD size=SizeofResource(NULL, hRes);

// ...

// Libération
FreeResource(hGbl);


Kaid - kaid.fr.st
Messages postés
37
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
30 août 2003

merci beaucoup pour votre aide
si je rencontre des problemes, je vous contacterai
encore merci