Datei in die .exe einbinden
-
Weiss jemand, wie man Dateien mit beliebigem Inhalt in eine executable einbindet? Ich möchte mit VS6 ein Programm schreiben, das gewisse fixe Datenblöcke in eine Datei schreibt. Ich kann ja nicht einen char Array mit tausenden einzelnen Bytes in den Quellcode nehmen...
-
als benutzerdefinierte resource ist es möglich aber einen grossen vorteil zu einem char array sehe ich nicht. warum lagerst du die datenblöcke nicht in eine andere datei aus?
-
Praetorian schrieb:
Ich kann ja nicht einen char Array mit tausenden einzelnen Bytes in den Quellcode nehmen...
warum nicht

-
Versteh nicht ganz was du machen willst?
Willst du Daten speichern und einbinden? Geht doch in dem du es als Textdatei speicherste und einliest.
Willst du ausführbaren Code einbinden? Das geht mit dynamischen Bibliotheken.

-
Na manchmal will man die Sachen wie Items lieber in die Exe mit rein stopfen als sein Programm mit zig kleinen dateien auszuliefen. stopfe es doch in eine resource rein, wie schon vorgeschlagen.
-
Der Grund, weshalb ich nicht einfach eine externe Datei mit den Daten beilege, ist der, dass das Programm nur aus der exe bestehen soll und nicht aus weiteren Dateien, wie schon C-Greis richtig bemerkt hat.
Ihr scheint einem char Array nicht abgeneigt zu sein... irgendwie scheint mir das aber keine saubere Lösung zu sein. Der Quellcode würde ja um ca. das 4fache der Datengrösse wachsen ("xxx," für ein Byte), bei einem Datenblock von ca. 1MB macht das einiges aus. Und wie solle ich den Datenblock überhaupt in Arrayform in den Code bringen?
Die benutzerdefinierte Resource interessiert mich da schon mehr. Die Erstellung scheint ja einfach zu sein. Wie kann ich dann im Code darauf zugreifen? Kann ich die als Array interpretieren oder gibt es einen speziellen Befehl?
Danke für eure Hilfe!
-
Ich versteh ehrlich gesagt nicht was du meinst, aber ich würde an deiner Stelle nen Tool schreiben, dass dir die Arrays mit den Daten erstellt.
Und die Rohdaten kannst ja einfach in nen unsigned char-Array einlesen, da nen char ja 1Byte groß ist und die Größe des Quellcodes wächst ja nicht wirklich, da es ja immernoch deine zusätzlichen Daten sind, nur in einem anderen Format.
-
Schon mal mit LIB.EXE probiert?
-
die resource geschichte vergrössert dein programm auch.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources.aspUser--- schrieb:
Und die Rohdaten kannst ja einfach in nen unsigned char-Array einlesen, da nen char ja 1Byte groß
das glaub ich nicht
-
Ich halte eine .rc Datei besser, wo man seine Dateien angibt die man reinladen will.
Keine Ahnung obs bei dir auch so funktioniert, aber bei der DLL Programmierung für ein bestimmtes Programm gehts ganz einfach so:
Datei *.rc:
BMP_BACKGROUND BITMAP DISCARDABLE "bmp\\background.bmp" BMP_ROSE BITMAP DISCARDABLE "bmp\\rose.bmp" BMP_ROSE_EXT BITMAP DISCARDABLE "bmp\\rose_ext.bmp"Datei *.h:
#define BMP_BACKGROUND 0x1000 #define BMP_ROSE 0x1003 #define BMP_ROSE_EXT 0x1004Grüße,
Harri
-
miller_m schrieb:
die resource geschichte vergrössert dein programm auch.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources.aspUser--- schrieb:
Und die Rohdaten kannst ja einfach in nen unsigned char-Array einlesen, da nen char ja 1Byte groß
das glaub ich nicht
Ich liebe solche Antworten

-
warum? ein unsigned char ARRAY ist mal mit sicherheit grösser als ein byte.
-
er will auch nicht ein char array in einem byte speichern

-
jetzt habe ich genauer gelesen. sorry
-
Mir ist schon klar, dass der Array im Programm nicht mehr Platz als die Rohdaten benötigen wird, es geht mir vielmehr um den Sourcecode.
@ harry3: Wahrscheinlich sind meine C++-Kenntnisse einfach zu gering... Du sagts dem Präprozessor, er soll das die Datei (in deinem Fall das Bild) in den Code miteinbeziehen, richtig? Wie könntest du dann nachher im Code auf diese Daten zugreifen, z.B. in eine externe Datei schreiben, also sozusagen das Bild aus der exe extrahieren? Welche Bedeutung haben die Hexwerte?
-
Ein Link, der zumindest einiges dazu erklärt (bei Nutzung von MSVC):
http://www.cpp-tutor.de/mfc/mfc/kap7/tut/tut2.htmIn den Beispielen fehlt noch der Aufruf von LockResource nach dem Aufruf von LoadResource.
Ein weiteres Beispiel findest Du:
http://www.codeproject.com/cpp/UpdateResource.aspDas Ablauf sieht in etwa so aus:
FindResource -> Handle auf die Resource
LoadResource -> Handle auf den Speicher
LockResource -> Zeiger auf die Daten
Der Resource Type wäre wohl in Deinem Fall RT_RCDATA. Dort kann man beliebige Daten unterbringen.Das ganze ist reine WinAPI.
Das Beispiel von harry3 ist eine Resource (Quell) Datei. Diese wird von dem Resourcencompiler (rc.exe) in eine .res Datei übersetzt. Die .res Datei kann dann als Resource in Dein Projekt integriert werden. Im Visual Studio erledigt das die IDE alles (mehr oder weniger leicht).
-
Danke an niemand :-), das hat etwas Licht ins Dunkel gebracht.