Dateien in .exe packen
-
Hallo,
ich habe eine Art Installationsprogramm.
Dieses Programm setzt einige Reg-Keys und kopiert einige .ico Dateien nach \windows\System32.Das Programm funktioniert, wenn ich die .exe und alle .ico Dateien in einem Ordner habe.
Frage:
Ist es möglich, dass ich die .ico Dateien in meine c++ .exe einbinde?Ich habe das z.B. mal in Perl mit Perl2Exe gemacht.
Ich hatte eine .exe die beim Start alle .ico Dateien in dieser .exe nach \TEMP entpackt hat. Am Ende des Programms wurden die Icons wieder gelöscht.Geht sowas auch in MS Visual C++ 6?
Ich will das nicht umbedingt mit WinRAR machen...mfg
trequ
-
jup...
du kanns die dateien als resourcen in die exe inkludieren, zum extrahieren gabs hier schon n paar threads, gugg ma http://www.c-plusplus.net/forum/viewtopic.php?t=89120&highlight=
bis dann man, ich
-
Hallo,
ich habe es jetzt so probiert:
CFile f; HINSTANCE hInst = AfxGetInstanceHandle(); HRSRC hRes = ::FindResource(hInst, MAKEINTRESOURCE(IDI_ICON_CF), RT_GROUP_ICON); HGLOBAL hResource = ::LoadResource(hInst, hRes); DWORD dwLen = ::SizeofResource(hInst, hRes); BYTE* pFileData = (BYTE*) ::LockResource (hResource); f.Open(_T("MyResource.ico"), CFile::modeCreate|CFile::modeWrite); f.Write(pFileData, dwLen); f.Close(); ::FreeResource(hResource);
Mein Icon heist IDI_ICON_CF.
Die Datei MyResource.ico wird erstellt.
Ursprünglich hatte die Datei 0KB. Ich habe es jedoch mit MAKEINTRESOURCE hingekriegt, dass das Icon erstellt wird.
Die .ico Datei hat nun eine Größe von 1KB. (Die org. ICONS haben 3KB)
Beim Öffnen der .ico Datei kriege ich die Meldung: "ICO/CUR Dekodierungsfehler" (IfanView).Jemand eine Idee?
mfg
trequ
-
HELP, PLZ.
-
CFile OutputFile; HRSRC resource; DWORD dwSize; HGLOBAL hGlobal; LPVOID inhalt; resource = FindResource( AfxGetInstanceHandle( ), MAKEINTRESOURCE( IDR_RESNAME ), "RES" ); dwSize = SizeofResource( AfxGetInstanceHandle( ), resource ); hGlobal = LoadResource( AfxGetInstanceHandle( ), resource ); inhalt = LockResource( hGlobal ); OutputFile.Open(PFAD+NAME+ENDUNG, CFile::modeRead | CFile::modeWrite | CFile::modeCreate ); OutputFile.Write( inhalt , dwSize ); OutputFile.Close(); FreeResource(hGlobal);
So funktionierts normalerweise ohne Probs!
-
Hallo,
leider funktioniert das bei mir nicht:
Wenn ich das Beispiel einbaue,
resource = FindResource( AfxGetInstanceHandle( ), MAKEINTRESOURCE(IDI_ICON_CF), RT_GROUP_ICON );
erhalte ich eine 1KB Datei.
inhalt ist leer und dwSize ist 20...?
Was ist richtig für den LETZTEN Parameter???
mfg
trequ
-
Dann teste einfach mal den Code von Rapha...
http://www.c-plusplus.net/forum/viewtopic.php?t=70297&highlight=findresource
Gruß
:: NoName ::
-
Hallo,
damit kann ich nix anfangen.
Mein Problem liegt da, dass er nur 20 Byte aus der Resource liest...
FindResource( AfxGetInstanceHandle( ), MAKEINTRESOURCE(IDI_ICON_CF), RT_GROUP_ICON ); FindResource( AfxGetInstanceHandle( ), MAKEINTRESOURCE(IDI_ICON_CF), "RES" ); ::FindResource(hInst, MAKEINTRESOURCE(IDI_ICON_CF), RT_GROUP_ICON);
Je nachdem was ich da angebe, kriege ich ein anderes Ergebniss.
GetLastError gibt aber immer OK zurück.Wie ist der letzte Parameter für ein I-C-O-N ???
Mich interesieren eure Beispiele für eine .exe nicht.
Es geht um ein ICON.mfg
trequ
-
Ja, und warum benutzt du dann diesen Code nicht ...
bool SaveBytesToFile(char* lpBytes, CString strFileName) { CFile fFile; if(!fFile.Open(strFileName, CFile::modeCreate | CFile::modeWrite)) { // Fehlermeldung hier return false; } // ich schreib jetzt einfach mal alle Bytes auf einmal in die Datei fFile.Write(lpBytes, strlen(lpBytes)); fFile.Close(); return true; }
-
:: NoName :: schrieb:
Ja, und warum benutzt du dann diesen Code nicht ...
strlen(lpBytes) ergibt 20.
Ich habe also nur 20 Byte von 1KB.
--> Demnach wird die Resource nicht korrekt gelesen.Wenn ich das jetzt in eine Datei schreibe, habe ich ja nix davon.
Die Datei ist dann ja korrupt, da fehlt dann ja was...mfg
trequ
-
trequ schrieb:
strlen(lpBytes) ergibt 20.
Und warum benutzt du strlen? Weißt du, wie strlen arbeitet?
-
trequ schrieb:
Ich habe also nur 20 Byte von 1KB.
--> Demnach wird die Resource nicht korrekt gelesen.Dann wird das wohl nichts, wenn kein Code hilft...
trequ schrieb:
Wenn ich das jetzt in eine Datei schreibe, habe ich ja nix davon.
Die Datei ist dann ja korrupt, da fehlt dann ja was...Stimmt, ist ja auch bei Bitmaps so...*Vergessen*
Gruß
:: NoName ::
-
MFK schrieb:
trequ schrieb:
strlen(lpBytes) ergibt 20.
Und warum benutzt du strlen? Weißt du, wie strlen arbeitet?
Hallo,
nein, weiß ich nicht.
Aber meine .ico Datei ist normalerweise 3KB groß.
Die Ausgabedatei ist nur 1KB groß.
Also fehlt da was...
CString output; output.format("%d", dwSize); MessageBox(output);
ergibt auch 20.
mfg
trequ
-
trequ schrieb:
nein, weiß ich nicht.
Ich hab das nicht aus Langeweile gefragt, sondern weil es für dich wichtig ist.
strlen ermittelt die Länge eines nullterminierten Strings. Es durchsucht den Speicher, bis es ein Nullbyte findet. Im Gegensatz zu String können in Binärdaten (wie z.B. Icons) durchaus auch mittendrin Nullbytes auftreten.
-
was schreibst du denn überhaupt in den cstring rein
schon mal den debugger bemüht?