2010-03-04 3 views
3

Je suis en train d'encapsuler des fichiers avec Visual C++ 2008, j'ai compris comment les intégrer mais je n'arrive pas à comprendre comment les récupérer. J'ai une certaine expérience C++, mais aucune avec Win32 ou Visual C++. Le but de l'emballage est d'exécuter du code, et si tout va bien, il peut exécuter le fichier incorporé.Récupération d'un fichier de ressources à partir d'un exe

J'emballe plusieurs fichiers différents, donc la réutilisation de code est la clé, et dans tous les cas je ne connaîtrai pas le nom du fichier incorporé. Mais je pourrais nommer l'exe comme le fichier enveloppé, donc si le programme peut obtenir le nom de lui-même qui fonctionnerait aussi.

Certains des fichiers enveloppés seront exe, et les autres seront des fichiers destinés à être exécutés par un programme externe.

Éditer: Ces fichiers sont incorporés avec un fichier .res, ils ne sont pas seulement concaténés à la fin de l'exe.

Répondre

5

Vous avez donc un fichier binaire incorporé en tant que ressource dans un fichier EXE, et vous voulez lire le fichier?

Essayez quelque chose comme ça (très rugueux, regarder des fonctions sur MSDN pour les paramètres appropriés):

HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(id), type); 
HGLOBAL hGlobal = LoadResource(NULL, hResource); 
BYTE* pData = (BYTE*)LockResource(hGlobal); 
int size = SizeofResource(NULL, hResource); 
// ... do something with pData and size, eg write to disk ... 
FreeResource(hGlobal); // done with data 

Vous voulez ajouter un peu de contrôle d'erreur pour cela!

+1

vous pourriez vouloir corriger vos usages variables. theResource-> hResource, theData-> hGlobal ... – Bahbar

+0

Oups, c'est ce que j'obtiens pour copier-coller une autre application trop rapidement. Corrigé ... – AshleysBrain

+0

Pour la première ligne, j'ai id comme "test.exe" et le type est RT_RCDATA. Il compile mais selon le débogueur hResource est null. Je ne suis pas sûr de ce qui ne va pas ... – jonescb

0

La principale chose que vous devez savoir (qui devrait être présent dans le fichier .RC qui est compilé dans le fichier .res) est le nom de la ressource. À partir de là, vous pouvez utiliser FindResource et LoadResource pour charger les données. Vous allez apparemment écrire ces données dans un fichier temporaire et exécuter ce fichier.

Questions connexes