| Autor |
Beitrag |
dertobsen
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 08.05.07 23:23
Hallo!
Ich habe folgendes Problem: Ich möchte ein Programm (A) schreiben welches seinerseits eine Programm (B) erstellt.
In der einfachsten Version habe ich das Programm B bereits vorliegen.
Jetzt ist die Frage: Wie bekomme ich das Programm B in das Programm A und wie bekomme ich es hin dass es wieder
als Exe-Datei gespeichert wird?
Ich habe versucht die fertige Datei B mit einem text-Editor zu öffnen, den Text in ein Memo zu kopieren und dann mit Memo.SaveToFile zu speichern.
Die Datei hatte zwar die richtige Größe, hat aber leider nicht funktioniert...
Außerdem habe ich versucht die Datei mttels Memo.LoadFromFile auszulesen, aber da hat er mit dann nur die 2 ersten Buchstaben ins Memo geschrieben.
Also meine Frage: Was tun?
Danke schon jetzt,
mit freundlichen grüßen,
dtobsen
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 08.05.07 23:27
Du willst eine Binärdatei in einer Exe unterbringen und diese dann wieder extrahieren? Du kannst sie Exe als Resource anhängen (dazu mal die Suchfunktion fragen) und diese Resource dann laden. Wie genau, bin ich mir nicht sicher, versuchs mal mit aTStringList.LoadFromResource, falls es das gibt. Auch hierzu mal die SuFu fragen. 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mi 09.05.07 09:01
Die Exe in eine Res Datei und dann...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.ExeAuspackenClick(Sender: TObject); var Stream : TResourcestream; begin Stream := TResourcestream.Create(HINSTANCE,'MYExe',RT_RCDATA); if not FileExists('C:\Test.exe') then Stream.SaveToFile('C:\Test.exe') else ShowMessage('Fehler'); Stream.Free; end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Mindforce
      
Beiträge: 358
Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
|
Verfasst: Mi 09.05.07 09:03
Hi,
auf dsdt.info musst du mal nach SpliFile und JoinFile gucken.
Damit kannst du Datei B in Datei B packen. Und mit SplitFile kannst du Datei B wieder aus der Datei A "heruasholen".
Ich bin grad nicht zuhause deswegen kann ich dir nicht so gut helfen. Aber es geht. Probiers aus!
Mindforce
_________________ Our force; in mind.
|
|
dertobsen 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 09.05.07 21:44
Titel: noch nicht ganz ... :(
Hallo!
Danke erstmal für die Antworten!
Also, SplitFile und JoinFile habe ich mir angeguckt. Das funktioniert hervorragend für fremde Dateien.
Ich kann also mit Prog A die Programme B und C zusammensetzen und auch wieder trennen.
Nur leider will ich ja das dass das Prog B in A drin steckt und dann erstellt wird wenn A ausgeführt wird.
Also habe ich mir das mit den Ressourcen angeguckt. Das sah sehr viel versprechend aus und auch in anderen
Foren habe ich entsprechende Hinweise gefunden. Dummerweise bin ich Anfänger und leider daran gescheitert aus
meinem Programm B eine Ressource zu machen!
Ich habe mit brcc32.exe gearbeitet aber das wollte irgendwie nicht... :
> Error calc.exe 1 3: Bad character in source input
das sagt er...
und ich habe keine Ahnung wie ich die nun die Exe-datei zu einer Ressource machen soll.
(ich habe auch den Quelltext der Datei, also wenn das leichter ist mache ich auch gerne aus dem in Delphi geöffneten Projekt eine Ressource.
Doch auch dann weiß ich leider nicht wie)
Wäre schön wenn mir da jemand noch nen kleinen Tipp geben könnte!
MfG
dtobsn
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mi 09.05.07 22:17
Eine Möglichkeit wäre
Erstelle eine Datei mit einem Texteditor trage dort folgendes ein in einer Zeile
MyExe RCDATA "C:\Dein Pfad\Test.exe"
und speichere diese Datei mit der Endung MyTest.rc, dann ziehst Du die rc Datei per Drag&Drop auf die Brcc32.exe
die erzeugt Dir dann die Res Datei.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| implementation
{$R *.dfm} {$R MyTest.res} procedure TForm1.ErzeugenClick(Sender: TObject); var Stream : TResourcestream; begin Stream := TResourcestream.Create(HINSTANCE,'MYExe',RT_RCDATA); if not FileExists('C:\test.exe') then Stream.SaveToFile('C:\test.exe') else ShowMessage('Fehler'); Stream.Free; end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
dertobsen 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 09.05.07 22:50
Titel: FERTIG
Hallo!
Das klappt hervorragend!
Erst dachte ich bräuchte ein GUI von brcc32 weil du schreibst ich solle die *.rc auf die brcc32 drauf ziehen.
Aber das geht ja wie ich festgestellt habe auch so.
Bei mir ist die brcc32.exe nämlich (im gegensatz zu dem screenshot den ich irgendwo (ich glaube in der hilfe) gesehen habe) ein Kommandozeielentool.
Aber wie auch immer: Es klappt!
Vielen Dank für die große Hilfe!
MfG
dTobsn
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 09.05.07 23:32
Titel: Re: FERTIG
dertobsen hat folgendes geschrieben: | | Bei mir ist die brcc32.exe nämlich (im gegensatz zu dem screenshot den ich irgendwo (ich glaube in der hilfe) gesehen habe) ein Kommandozeielentool. |
Nie gehört, dass es anders sein soll
Aber schön zu hören, dass es klappte 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|