Bonjour,
je ne parvient pas à extraire une ressource de mon programme. Celui ci semble échouer dans le création du fichier, puis dans la procédure d'écriture.
Voici des exraits du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
int decompress_exefile(char *ressourceName)
{
    HRSRC aResourceH;
    HGLOBAL aResourceHGlobal;
    unsigned char * aFilePtr;
    unsigned long aFileSize;
    HANDLE file_handle;
    
    aResourceH = FindResource(NULL, ressourceName, "BINARY");
    
    if(!aResourceH)
    {
        printf("cannot find ressource\n");
        return 0;
    }
    
    aResourceHGlobal = LoadResource(NULL, aResourceH);
    
    if(!aResourceHGlobal)
    {
        printf("cannot load ressource\n");
        return 0;
    }
    
    aFileSize = SizeofResource(NULL, aResourceH);
    aFilePtr = (unsigned char *)LockResource(aResourceHGlobal);
    
    if(!aFilePtr)
    {
        printf("cannot lock ressource into memory\n");
        return 0;
    }
    
    char _filename[64];
    snprintf(_filename, 62, "%s.exe", ressourceName);
    file_handle = CreateFile(_filename,
                             FILE_ALL_ACCESS,
                             0,
                             NULL,
                             CREATE_ALWAYS,
                             0,
                             NULL);
                             
    if(INVALID_HANDLE_VALUE == file_handle);
    {
        int err = GetLastError();
        
        if((ERROR_ALREADY_EXISTS == err) || (32 == err))
        {
            return 1;
        }
        
        printf("%s decompress error %d", _filename, err);
        return 0;
    }
    
    while(aFileSize--);
    {
        unsigned long numWritten;
        WriteFile(file_handle, aFilePtr, 1, &numWritten, NULL);
        aFilePtr++;
    }
    
    CloseHandle(file_handle);
    return 1;
}
Voici maintenant mon fichier dans lequel est inclus la ressource :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
resource binary "resource.exe"
Ma fonction est appelée ainsi : decompress_file("resourcce");

Lors de l'exécution du programme, le programme ma d'abord indiqué que la ressource était introuvable. En le modifiant un peu, j'ai réussi à lancer l'écriture, mais le fichier créé ne contient que le premier octet de la ressource.
Je ne comprends pas le problèmes, ainsi toute aide sera la bienvenue.
Merci d'avance.

NOTES : je suis allé fouillé dans le programme, la ressource y est bien en entier.
Au début, le handle ne s'initialisait pas, et j'obtenais une erreur (decompress error 0). Ce problème n'est pas totallement résolu, je comprends pas vraiment quand ca marche et quand ca échoue.