Informatique Dossier en fichier Ressource. Program. C

Tomikaddle

Apprenti Batcheur
7 Juin 2014
314
5
129
Salut.
J'essaye, en ce moment, de programmer des espèces d'installateurs en C.
Ils consistent à inclure un quelconque fichier dans l'exécutable via un fichier .rc pour l'extraire grâce à une fonction:
main.h:
Code:
#include <stdio.h>
#include <stdlib.h>

int ExtractResource(const char *resname, const char *filename);

int main()
{
    char Chemin [] = "C:\\Users\\User\\Desktop\\Archive.rar";
    ExtractResource("Archive", Chemin);
}

int ExtractResource(const char *resname, const char *filename)
{
  HRSRC hFind = FindResource(0, resname, RT_RCDATA);
  PVOID pLock = LockResource(LoadResource(0, hFind));
  DWORD dSize = SizeofResource(0, hFind), dWrite = -1;

  if(dSize){
    HANDLE hFile = CreateFile(filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    if(hFile != INVALID_HANDLE_VALUE){
      WriteFile(hFile, pLock, dSize, &dWrite, 0);
      CloseHandle(hFile);
    }
  }
  return dSize == dWrite;
}

ressources.rc:
Code:
Archive RCDATA "Archive.rar"
Cette archive, se trouvant à la racine du projet.

J'aimerais donc, sur la même idée, faire cela mais avec un dossier, pas un fichier tel qu'une archive.rar, une musique.mp3... mais je ne sais pas comme inclure un dossier dans un fichier de ressources.rc

Merci d'avance.
 
Oui, c'est exact, mais étant donné le nombre de .h, j'aimerais bien être guidé si tu vois ce que je veux dire.
 
Code:
int ExtractResource(...)
Code:
return dSize == dWrite;

Une fonction qui est sensée retournée un entier mais qui retourne un booléen ? T'as pas d'erreurs ?
Puis du code dans un .h c'est pas propre propre, surtout le main quoi.

Sinon pour ton truc je sais pas, regarde si il existe pas des libraries pour ça.

Bizou
 
Déjà on évite à tout prix de nommer les variables avec une majuscule au début.
C'est pas primordial, mais c'est une question de cohérence. Pareil, les fonctions c'est plus souvent en camelCase.
De plus, tant qu'à faire, même si tu utilises une fonctionnalité réservée à du Windows, les chemins délimités en "/" sont préférés (c'est comme ça en POSIX et ça marche sous Windows, alors...)
Ensuite, tu as pas mal raté ton .h. Les headers ne devraient contenir que les définitions, c'est-à-dire les signatures de fonctions (pour main, ce n'est pas nécessaire) et tu dois les implémenter dans des .c (ou .cpp en C++).
@hebriel, retourner un booléen dans une fonction qui retourne un int est complètement légal et dans la plupart des cas, ça marche comme il faut. C'est forcément mieux de retourner un bool après, bien sûr.
Sur un forum autour de minecraft, je pense pas que tu recevras beaucoup d'aide en C/++. J'aurais pu t'aider, mais je suis pas mal allergique à tout ce qui touche à la winapi et je n'ai pas de machine windows sous la main pour tester.