Interrogation

flatmax Messages postés 37 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 30 août 2003 - 22 août 2003 à 19:19
flatmax Messages postés 37 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 30 août 2003 - 23 août 2003 à 13:37
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

cs_anthraxx Messages postés 47 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 9 juin 2004
22 août 2003 à 19:38
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
0
flatmax Messages postés 37 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 30 août 2003
22 août 2003 à 19:41
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
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
22 août 2003 à 19:42
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
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
22 août 2003 à 19:49
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
0

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

Posez votre question
flatmax Messages postés 37 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 30 août 2003
22 août 2003 à 19:49
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
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
22 août 2003 à 19:54
Oui j'ai compris suite à la réponse d'anthraxx.
Voir ma réponse ici$

Kaid - kaid.fr.st
0
flatmax Messages postés 37 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 30 août 2003
22 août 2003 à 19:59
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
0
cs_anthraxx Messages postés 47 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 9 juin 2004
22 août 2003 à 22:00
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
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
22 août 2003 à 23:25
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
0
flatmax Messages postés 37 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 30 août 2003
23 août 2003 à 13:37
merci beaucoup pour votre aide
si je rencontre des problemes, je vous contacterai
encore merci
0
Rejoignez-nous