Ressourcen oder wie ???
-
Ich meine hier mal was gelesen zu haben, das man an eine *.exe Datei Daten anhängen kann.
Hintergrund: Ich möchte mit einem meiner Programme ein Bild anzeigen.
Zur Anzeige des Bildes soll man einfach auf die *.exe Datei klicken und das Bild (vielleicht auch mehrere) soll im Programm angezeigt werden. Dazu sollte das Bild an die *exe angehängt oder wie auch immer hinzugefügt werden (Und das zur Laufzeit individuell, nicht in der IDE).
Hat da jemand nen Lösungsansatz ??
-
And deine laufende Exe kanst du nichts anhängen, da du sie üblicherweise nur zum Lesen, nicht aber zum Schreiben öffnen kannst.
An eine Kopie deiner Exe kannst du beliebige Daten anhängen (append). Natürlich müsstest du dir noch eine Art Header ausdenken (und mitspeichern), damit dein Programm später weiss, wo die Nutzdaten anfangen, wie gross die einzelnen Abschnitte sind usw.
PS. Verschoben nach "Rund um".
-
Original erstellt von spool:
Hintergrund: Ich möchte mit einem meiner Programme ein Bild anzeigen.Ich verstehe nicht ganz, was du willst. Warum bindest du das Bild nicht einfach per Resource in dein Proggi mit ein?
-
@Jansen:
Ist mir schon klar, das ich an meine laufende exe nichts anhängen kann. Das ist aber nicht das Problem, ich würde meine Daten in einen File zippen und dann an eine Kopie meiner Exe anhängen. Da die Exe immer die gleiche Größe hat müßte das funzen. Welches append meinst du, fopen (<stdio.h> )und a oder a+ modus ??@webfritzi:
zur Laufzeit ist das Zauberwort. Da kann ich doch die Resource nicht mehr ändern, oder ?
-
Ne, stimmt.
-
Original erstellt von spool:
Welches append meinst du, fopen (<stdio.h> )und a oder a+ modus ??Zum Beispiel.
Bei einer einzelnen (Zip)Datei im Anhang brauchst du natürlich keinen Header; ich war davon ausgegangen, dass du immer unterschiedlich viele Bilder direkt aus der Exe-Datei laden willst. Also ohne den Umweg über temporäre Dateien, wie es zB. bei Zip erforderlich ist.
-
Also wenn du die Bilddateien nicht erst aus deiner EXE auf die Platte kopieren willst um sie zu betrachten, sondern sie direkt im Speicher haben willst, würde ich acht geben den Header der EXE richtig anzupassen. Die Größe des Images verändert sich schließlich. Am besten erstellst du eine neue Section in der Datei. Die hat dann auch gleich die richtigen Characteristics (sonst könnte man die Daten auch an die letzte, bereits bestehende Section anhängen). Der Header der Section muss natürlich auch jeweils angepasst werden.
Wenn du die Daten allerdings sowieso rauskopierst und woanders zum Anzeigen speicherst, brauchst du das nicht. Dann würde ich empfehlen die Position der Checksum im PE Header als eine Art Zeiger auf deine Daten zu missbrauchen damit du auch weißt wo in der EXE die Bilder anfangen.
Laufzeittechnisch sieht es allerdings wirklich schlecht aus. Du wirst wohl ne Kopie deiner EXE anfertigen müssen.
-
@malfunction:
Danke für die Antwort, aber da ist mir ein bischen zuiel fachchinesisch drin. Den Aufbau einer Exe kenn ich leider nicht (noch nciht so lange mit c++ unterwegs)
Wäre natürlich schön, die Bilder sofort im Speicher zu haben. Ist mit Sicherheit ein Geschwindigkeitsvorteil. Da aber der User später rein theoretisch da 100 Bilder reinpacken könnte, wär der Speicher ziemlich voll, oder ??@all
Ich bin offenbar zu blöd um die Sache hinzukriegen. Ich hab mittels einer Batch (Copy datei1 + datei2 datei3) an meine Exe ein Bild angehängt.
Ich probier den ganzen Tag schon, die Sache wieder zu trennen. Als erste Datei sollte meine Exe in die neue Datei kopiert werden. Wenn ich nun mittels open/read oder fopen/fread die Anzahl Bytes der Exe vom Anfang der Datei3 lese und sie in einen neuen File schreibe, funktioniert es nicht. Wenn ich die so entstandene Exe anklicke startet ein Konsolenfenster und das wars. Die Größe stimmt, aber es ist z.B. kein Icon zugeordnet. Hat da einer ein kleines Beispiel ??[ Dieser Beitrag wurde am 01.01.2003 um 22:07 Uhr von spool editiert. ]
-
Ganz sicher, dass du dich beim Auslesen/Schreiben nicht vertan hast, und sei es auch nur um ein Byte?
Vergleich doch mal Original und Ergebnis, ob die identisch sind. Die meisten Hexeditoren haben eine entsprechende Funktion, ansonsten sieh dir wenigstens jeweils Anfang und Ende der Dateien an.
-
Ich war ein Byte zuweit nach hinten gerutscht und hatte aber dafür am Ende ein Nullbyte zuviel angehängt..
Nach ein paar Stunden vor der Kiste und endlosem Ausprobieren sollte man doch erstmal ein Pause machen. Dann kommt einem plötzlich die Lösung !