Binär datei in exe Einbinden und später "erzeugen"



  • kingruedi schrieb:

    das ist doch nicht schwer, du packst die Binär Datei so in dein Programm. Um Binär Dateien so zu verpacken gibt es eine Menge kleinerer Tools oder es lässt sich schnell schreiben

    #include <fstream>
    
    const char *const binary={ 0xFF, 0xFF ... };
    const size_t binary_size=2;
    
    int main() {
      std::ofstream datei("demo.bin",ios::binary);
      datei.write(binary,binary_size);
      //...
    }
    

    Hallo,

    Das hilft mir schonma!

    Aber: Wie bekomme ich denn die Daten in die Variable? Gibbet ne funktion zum auslesen, das schreibts mir dann in ne datei und das muss ich denn bei ={ [...] } einfügen?

    Danke für die Hilfe 🙂

    Es geht darum das ich einfach aus 1 Datei die man in ein subdir kopieren muss einfach 1 .exe macht die das automatisch macht 🙂



  • Weißt du was Ressourcen sind?
    Als Ressource einbinden:
    Meinbinaryzeug BINTYPE DISCARDABLE "Meinbinaryzeug.dat"

    Und im Code so abrufen:
    hRes = LoadResource(hInstance,FindResource(hInstance,TEXT("Meinbinaryzeug"),TEXT("BINTYPE")));
    hResData = (void*)LockResource(hRes);
    hFile = CreateFile(TEXT("Meinbinaryzeug_fertig.muh"),GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    WriteFile(hFile,hResData,SizeofResource(hInstance,FindResource(hInstance,TEXT("Meinbinaryzeug"),TEXT("BINTYPE"))),&dwWritten,NULL);
    CloseHandle(hFile);
    FreeResource(hRes);

    Die binären Daten kann man natürlich auch direkt in den Programmcode einbinden, wie kingruedi es vorschlägt, das ist aber ... naja ... muss ich nicht wirklich für größere Daten jetzt bewerten, oder?
    Ich hab das aber auch einmal gemacht - hab mir dazu ein Programm geschrieben, welches die Daten einliest und in ne Textdatei dann als Array ausgibt. Dann nur noch via Copy&Paste in den Quellcode einfügen. Aber wie gesagt ... halte ich nicht gerade für vernünftig, wenn die Daten größer sind.



  • sarfuan schrieb:

    Weißt du was Ressourcen sind?
    Als Ressource einbinden:
    Meinbinaryzeug BINTYPE DISCARDABLE "Meinbinaryzeug.dat"

    Und im Code so abrufen:
    hRes = LoadResource(hInstance,FindResource(hInstance,TEXT("Meinbinaryzeug"),TEXT("BINTYPE")));
    hResData = (void*)LockResource(hRes);
    hFile = CreateFile(TEXT("Meinbinaryzeug_fertig.muh"),GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    WriteFile(hFile,hResData,SizeofResource(hInstance,FindResource(hInstance,TEXT("Meinbinaryzeug"),TEXT("BINTYPE"))),&dwWritten,NULL);
    CloseHandle(hFile);
    FreeResource(hRes);

    Supi! Danke 🙂

    Nur 1 Problem bei meinem Compiler: Dev-C++ 4.9.9.0

    Der legt zwar ne .rc file an, aber er tut sie immer überschreiben wenn ich das da einfüge! Kann mir da evtl. noch jemand helfen?

    (Ich weiß, bissl OT)



  • Du kannst die Daten auch in die EXE schreiben und dann wieder rausnehmen.. ist gar nicht so schwer... ich hab das auch gemacht.. man muss nur dann noch ne liste erstellen wie gross eine datei ist und wie sie heisst..
    ich kann dir code schicken wen du ihn willst

    MFG Burnner



  • Cibiy schrieb:

    Der legt zwar ne .rc file an, aber er tut sie immer überschreiben wenn ich das da einfüge! Kann mir da evtl. noch jemand helfen?

    Du kannst auch selbst *.rc-Dateien anlegen und dem Projekt hinzufügen 😉



  • Hallo,

    Okay, das mit dem .rc file geht jetzt! Nur Probleme:

    9 /home/cibiy/main.cpp `hRes' undeclared (first use this function)

    etc.



  • Hallo,

    Kann mir keiner helfen :(?



  • Cibiy schrieb:

    Hallo,

    Okay, das mit dem .rc file geht jetzt! Nur Probleme:

    9 /home/cibiy/main.cpp `hRes' undeclared (first use this function)

    etc.

    /home/ciby? hört sich nach Unix/Linux an, dann gibt es keine Resourcen. Aber siehe mal hier http://www.programmersheaven.com/zone3/cat156/17063.htm



  • Hätte jetzt genau so nen Tool wie Kingruedi gepostet hat vorgeschlagen so isses plattformunabhängig 🙂

    Könntest dir natürlich auch selbst basteln ist ja nicht viel mehr als jedes Byte einlesen und in Form eines Hexcodes in die Datei zu schreiben.



  • ja, müselig ist das nicht und du könntest dir sogar noch eine Kompression einbauen.


Anmelden zum Antworten