Entwickler-Ecke
Dateizugriff - Externe Datei in eine exe Datei einbinden und extrahieren??
com-chip - Sa 29.01.05 18:48
Titel: Externe Datei in eine exe Datei einbinden und extrahieren??
Hallo Leute!
Folgendes Problem: Ich möchte eine Datei, egal welcher Typ, in die exe Datei mit hinein packen. Wie mache ich denn das?? Muss ich die irgendwie in die .res kriegen?? Und dann wenn die Anwendung startet, dann soll sich diese Datei aus der exe Datei extrahieren und sich einfach in diesen Ordner kopieren. Geht das irgendwie?? Ich hoffe ihr habt die Frage verstanden, ich wusste nicht wie ich es formulieren sollte. :(
Coder - Sa 29.01.05 20:15
Soweit ich weis, kannst du an eine exe Datei beliebig Text unten ranschmeisen.
Um sie dann zu extrahieren müsstest du sie mit einem FileStream aus der exe auslesen. :wink:
com-chip - Sa 29.01.05 20:54
Das klingt mir schon irgendwie logisch :idea:
Aber wie hänge ich an der EXE Datei noch Text ran?? Ich müsste ja auch wissen wo wegen auslesen, verstehst du?? Wenn nicht schreib doch mal eien Beispielanwendung. Würde mich schon interessieren wie ich das genaz machen kann.
Coder - Sa 29.01.05 21:21
Ja, mir kam es auch etwas umständlich vor. :lol:
Das mit den resource Dateien hab ich grad erst im SwissDelphiCenter gelesen.
com-chip - Sa 29.01.05 21:48
OK! Die Datei hab ich drin. Zugreifen geht auch irgendwie aber wie krige ich die jetzt wieder raus?? Klingt vielleicht unlogisch, ist es aber nicht. Wenn ich diese jetzt drin habe, kann ich diese exe Datei weiter geben, und dann möchte ich diese per Knopfdruck wieder extrahieren also raus aus der exe in das selbe Verzeichnis. So können dann auch andere Programme darauf zugreifen welche von mir geschrieben sind. Versteht ihr?? Klingt ja fast wie ein zip Programm... Soll aber keines sein da ich nur eine kleine Datei mittransportieren muss. :roll:
com-chip - Sa 29.01.05 22:00
Sorry wegen eben, mein Fehler. Ich hatte auf Aktuallisieren gedrückt da ich die Verbindung kurz gekapt habe, und da hat ers noch mal reingemacht.
Ich versuche es jetzt mal so wie ihr meint. Also den anderen Link. Ich geb dann bescheid. Übrigens, wenn man Bin oder Binäry eingibt, dann geht das bei mir leider nicht, ERROR sagt dann die Dos Eingabeaufforderung :(
Zitat: |
nur musst du in dem .rc file als typ Binary oder BIN angeben, wenn ich mich recht erinnere. |
retnyg - Sa 29.01.05 22:08
gehts mit RCDATA auch ned ?
com-chip - Sa 29.01.05 22:20
Doch das ging bei RcDate. Bei Binary ging es auch, ich musste die Eingabeaufforderung nur einmal schließen und es noch einmal versuchen, dann ging das. Jetzt probiere ich noch mal schnell aus wie ich sie wieder raus kriege, sollte aber kein Problem sien.
com-chip - Sa 29.01.05 22:29
Hallo! Es gibt schon wieder ein Problem... Leider bekomme ich die Res nicht wieder auseinander. Wenn ich folgendes eingebe:
Delphi-Quelltext
1:
| PutBinResTo('MPEGDLL', ExtractFilePath(ParamStr(0))+'mpegdll.dll'); |
Damm kommt beim erzeugen eine Meldung "Undefinierter Bezeichner: "PutBinResTo""
Was soll ich denn dann machen?? Irgendwie funktz das bei mir nicht. Hab ich vielleicht irgendwas vergessen???
----------------------
Problem hat sich erledigt, hab den oberen Text vergessen :oops:
com-chip - Sa 29.01.05 22:54
Kann man mir jetzt noch mal helfen und alles zusammenfassen?? Irgendwo ist heir ein fehler, ich weiß nur nicht wo. Also, die Datei Test.doc wir als Res erzeugt:
Zitat: |
Testprogramm BinData chat.doc |
(das mache ich mit Eingabeaufforderung, funktioniert auch.)
Jetzt binde ich es ein:
Dann noch die Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function PutBinResTo(binresname: string; path: string): boolean; var ResSize, HG, HI, SizeWritten, hFileWrite: Cardinal; begin result := false; HI := FindResource(hInstance, @binresname[1], 'BINRES'); if HI <> 0 then begin HG := LoadResource(hInstance, HI); if HG <> 0 then begin ResSize := SizeOfResource(hInstance, HI); hFileWrite := CreateFile(@path[1], GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0); if hFileWrite <> INVALID_HANDLE_VALUE then try result := (WriteFile(hFileWrite, LockResource(HG)^, ResSize, SizeWritten, nil) and (SizeWritten = ResSize)); finally CloseHandle(hFileWrite); end; end; end; end; |
Und ich dachte so kann ich es erzeugen, doch leider funktioniert es nicht. :(
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin PutBinResTo('Testprogramm', ExtractFilePath(ParamStr(0))+'test.doc'); end; |
Was habe ich denn jetzt falsch gemacht?? Er sollte es doch jetzt in das selbe Verzeichnis schreiben in dem sich die Anwendung befindet, oder?? Aber das klappt nicht. Alles habe ich aber beachtet und müsste auch richtig sein, oder???
Bitte antwortet noch einmal, ich brauche dringend hilfe!! Heute wäre echt nicht schlecht. Danke im Voruas. Viele Grüße com-chip
retnyg - So 30.01.05 05:30
die funktion putbinresto muss in deinem source vor dem aufruf von button1click kommen, sonst kennt er es nicht ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!