Dipl. User mit summa cum laude
was dingsi sagte, ist in ordnung ... Du kannst aber auch den ResHacker verwenden, um die Daten in deine Exe zu packen ...
Die API Routine fuer Bitmaps heisst:
HBITMAP LoadResourceBitmap(HINSTANCE hInstance, LPSTR lpString, HPALETTE FAR* lphPalette)
Allerdings kannst du damit nur Bitmaps aus der BITMAP Sektion lesen.
Eine Andere LowLevel moeglichkeit waere, direkt
HGLOBAL LoadResource(
HMODULE hModule, // resource-module handle
HRSRC hResInfo // resource handle
);
und
LPVOID LockResource( HGLOBAL hResData ); // handle to resource to lock
zu verwenden. Damit kannst du jede beliebige Art von Daten aus den Resourcen einlesen, und dann so interpretieren, wie dus gerne haettest ... Auf diese Art benutze ich auch verschluesselte PNGs in meinem Tastenpatch als Spalchscreen.
Eine Quick n Dirty Methode waere allerdings noch folgendes ...
Du oeffnest zum Lesen in deinem Programm die Datei argv[0], also die ausgefuerte Datei selber. Dann ermittelst du die Dateigroesse in byte (filesize() ?) und setzt seinen Lesezeiger auf 4 byte vor Dateiende. Du liest einen Integer (also 4 byte ein) und setzt deinen Lesezeiger um 4+gelesener integer Byte zurueck. Das ist der Anfang deiner Daten mit der Groesse von (gelesener interger) Byte. Dann kompilierst du dein Programm, und macht
copy myprog.exe + mybitmap.bmp myprog.exe
anschliessend oeffnest du die Exe noch mit einem hexeditor und fuegst die Groesse des bitmaps an die Datei an (byteorder beachten)
Statt der Groesseninfo kannst du natuerlich einen ganzen header erstellen, der z.B. auch checksummen enthaellt, sodurch du dann auch sehen kannst, ob ueber haupt sinnvolle daten vorhanden sind am ende der exe ...
typedef struct myheader
{ char ID[5]='Y','n','n','u','s';
char bmp[56000];
}
mit einem (zweiten) Programm laedst du dein bitmap, fuellst die myheader struktur aus, und schreibst sie ans ende deiner Exe.
In der Exe oeffnest du sie selber (argv[0]) und gehst an die position filesize() - sizeof(myheader) und laedst ueber ein blockread oder aehnliches die daten direkt in ein myheader struct ein. dann checkst du ID == "Ynnus" und wenn das stimmt, dann ist das BMP korrekt vorhanden. Ist das BMP nicht in der Exe, dann wird in ID sicher nicht Ynnus stehen, und du kannst das Programm ordentlich beenden, und sagen, die exe sei korrupt oder so ...
Gruss Luki