Dynamische Speicheranforderung

Also, ich wollte mal so was wie einen Binder schreiben. Im Moment bin ich so weit, dass der Builder zwei Dateien als Resource in einer exe-datei mit resource-sektion speichert. Doch will mein Builder einfach keinen Speicherplatz reservieren, und wirft eine Exception, sogar bei sehr kleinen Dateien:

Code:
#include <cstdlib>
#include <iostream>
#include <windows.h>

using namespace std;
void error_exit(char *msg);

int main(int argc, char *argv[])
{
    char exe1[255], exe2[255], stub[255], c;
    FILE *FirstFile, *SecondFile;
    HANDLE hHandle;
    void *ptr1, *ptr2;
    int size1, size2, i;
    /*char *buffer1, *buffer2;*/
    
    cout << "Please enter path to stub:   ";
    cin >> stub;
    
    cout << "Please enter path to first file to bind:   ";
    cin >> exe1;
    
    cout << "Please enter path to second file to bind:   ";
    cin >> exe2;    
    
    FirstFile = fopen(exe1, "rb");          //info about first file
    if(FirstFile == NULL)
        error_exit("FirstFile == NULL");
    fseek(FirstFile, 0, SEEK_END);
    size1 = ftell(FirstFile);
    fseek(FirstFile, 0, SEEK_SET);
    
    SecondFile = fopen(exe2, "rb");
    if(SecondFile == NULL)
        error_exit("SecondFile == NULL");   //info about second file
    fseek(SecondFile, 0, SEEK_END);
    size1 = ftell(SecondFile);
    fseek(SecondFile, 0, SEEK_SET);
    
    /*buffer1 = (char *)malloc(size1);                       //buffer for first file
    if(buffer1 == NULL)
        error_exit("Not enough memory available");*/
    
    /*buffer2 = (char *)malloc(size2);                       //buffer for second file
    if(buffer2 == NULL)
        error_exit("Not enough memory available");*/
        
    char *buffer1 = new char[size1];
    char *buffer2 = new char[size2];
        
    for(i = 0; i < size1; i++)
    {
        buffer1[i] = fgetc(FirstFile);
    }
    fclose(FirstFile);
    
    for(i = 0; i < size1; i++)
    {
        buffer2[i] = fgetc(SecondFile);
    }
    fclose(SecondFile);
        
    ptr1 = (void *)&buffer1;                                //conversion to void ptr
    ptr2 = (void *)&buffer2;                                //conversion to void ptr
        
    
    hHandle = BeginUpdateResource(stub, 1);
    if(hHandle == NULL)
        error_exit("Couldn 't open the specified file...");
        
    if(!UpdateResource(hHandle, MAKEINTRESOURCE(0x1337), MAKEINTRESOURCE(0x1337), 0, ptr1, size1))
        error_exit("Updating resources failed");
    
    if(!UpdateResource(hHandle, MAKEINTRESOURCE(0x1336), MAKEINTRESOURCE(0x1336), 0, ptr2, size2))
        error_exit("Updating resources failed");
        
    if(!EndUpdateResource(hHandle, 0))
        error_exit("EndUpdateResource failed");
    
    
    
    
    delete[] buffer1;
    delete[] buffer2;
    
    return EXIT_SUCCESS;
}


void error_exit(char *msg)
{
     cerr << msg << endl;
     getchar();
     exit(1);
}

Stub.exe, bisher nur zu Testzwecken. Hat eine Resource-Sektion.

Kompiliert mit Dev-C++, also MinGW.
 
Entschuldige bitte, vielleicht ist es auch mein Fehler, aber:
Wenn Du mit den Zeilen 26 bis 31 size1 ausrechnest, willst Du dann mit 33 bis 38 nicht size2 berechnen?

Also:
Code:
size2 = ftell(SecondFile);
 
Die Vermutung liegt nahe!

Ich vermute außerdem, dass in Zeile 57 ebenfalls size2 gemeint ist!

Zumindest mach es Sinn für die Größe von FirstFile und SecondFile unterschiedliche Variablen (size1 & size2) zu verwenden.
 
Zurück
Oben