AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

.exe erstellen

Ein Thema von any_key · begonnen am 20. Sep 2006 · letzter Beitrag vom 21. Sep 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#21

Re: .exe erstellen

  Alt 21. Sep 2006, 00:01
Ich kann mir schon denken wo der Fehler ist.

Hast du es ungefähr so in der Unit stehen?

Delphi-Quellcode:
procedure PrepareFile...
begin
...
end;
Wenn ja, dann muss es so heißen:

procedure TForm1.PrepareFile... Das ganze noch unter public deklariert und dann is gut!

Also so:

Delphi-Quellcode:
public
  procedure PrepareFile...
end;

procedure TForm1.PrepareFile...
begin
...
end;

Hoffe ich hab dich richtig verstanden und du mich


PS: Ich geb dir nen Tip fürs Lernen! Such dir hier im Forum nen paar OpenSource Programme und code sie nach. Dadurch lernt man ziemlich schnell, wie alles so funktioniert und was wichtig ist usw.
Hab ich damals auch so gemacht, und als ich es in der Ausbildung hatte, konnte ich schon alles
  Mit Zitat antworten Zitat
wellilein

Registriert seit: 15. Sep 2006
Ort: 78112 St. Georgen
7 Beiträge
 
#22

Re: .exe erstellen

  Alt 21. Sep 2006, 02:59
Mal ganz generell gesprochen: Ja, man kann von einem Programm aus eine andere EXE erstellen.
Schließlich macht die Delphi EXE ja nichts anderes als (früher oder später) eine neue EXE mit beliebigem Inhalt zu erstellen.
Üblicherweise braucht man dazu einen Compiler.

Bei den neueren Sprachen die auf Intermediate Code basieren (.NET) lässt sich das ganze etwas einfacher erlediglen, da diese oft direkt Intermediate Code ausgeben können (Reflection.Emit()).

Was hier im Forum vorgestellt wurde erinnert eher an einen Interpreter: eine vorgefertigte EXE wird eigentlich nicht verändert, aber die Aufgaben werden in einem zu interpretierenden Teil (Config-File, Daten am Ende der EXE) abgelegt.

Ich würde auch sagen, dass ein Interpreter zunächst einfacher und schneller zu programmieren ist. Das kommt aber auf die Mächtigkeit an. Wenn viele unterschiedliche Aufgaben erledigt werden sollen wird es irgendwann kompliziert. Viele Sachen lassen sich auch irgendwann nicht mehr sinnvoll als Daten beschreiben.

Das ist dann der Punkt an dem man sich eine Grammatik definiert und einen Compiler baut.

Borland hat einige ältere Versionen der Pascal Compiler online gestellt: Liste frei verfügbarer Compiler. Das bedeutet: Dein Programm könnte den Compiler als Resource mitbringen und müsste dann "nur" noch in der Lage sein, gültigen Pascal-Code zu erzeugen. Dann kannst Du jede belibige EXE erzeugen.

Ich sage nicht, dass das einfach ist , aber die Möglichkeit besteht jedenfalls.

Gruß, Thomas
Thomas W.
  Mit Zitat antworten Zitat
any_key

Registriert seit: 7. Okt 2005
96 Beiträge
 
Delphi 7 Personal
 
#23

Re: .exe erstellen

  Alt 21. Sep 2006, 16:12
also so ganz versteh ich es noch nicht...
ich hab den code jetzt so umgeschrieben das ich ihn compilern kann und die procedure prepare file eingefügt (auch wenn es meiner meinung nach jeder logik wiederspricht...)
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure PrepareFile;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function CreateConfigFile: TStrings;
var
ConfigFile: TStrings;
begin
ConfigFile := TStringList.Create;
ConfigFile.Add('ZAHL=');
// usw. ConfigFile.Add('WEITERE_INFO=');

Result := ConfigFile;
//ConfigFile.Destroy;
end;

function TMainFormPrepareConfigFile: TStrings;
var
ConfigFile: TStrings;
begin
ConfigFile := TStringList.Create;
ConfigFile.AddStrings(CreateConfigFile);

ConfigFile.Strings[0] := ConfigFile.Strings[0] + 'Edit1.Text';
// usq. ConfigFile.Strings[1] := ConfigFile.Strings[1] + 'Info 2';

Result := ConfigFile;
end;

function TMainFormPrepareServer(aFileName, aNewFileName: String; aConfigFileText: TStrings): Boolean;
var
OrigFile, ConfigFile, NewFile: TFileStream;
ConfigFileText: TStrings;
OrigFileSize, ConfigFileSize: Integer;
begin
NewFile := TFileStream.Create(aNewFileName, fmOpenWrite);
OrigFileSize := 100;
NewFile.Seek(OrigFileSize, soFromBeginning);
SetEndOfFile(NewFile.Handle);

//ConfigFile als Text öffnen und aus den Infos ein neues erstellen
ConfigFileText := TStringList.Create;
ConfigFileText.Assign(aConfigFileText);

//ConfigFile an den Server anhängen
ConfigFileText.Insert(0, 'SELF=' + IntToStr(OrigFileSize));
ConfigFileText.SaveToFile(ExtractFilePath('aNewServerName') + 'TempFile.conf');
ConfigFileText.Free;
ConfigFile := TFileStream.Create(ExtractFilePath(aNewFileName) + 'TempFile.conf', fmOpenRead);
ConfigFileSize := ConfigFile.Size;
NewFile.CopyFrom(ConfigFile, 0);
NewFile.Write(ConfigFileSize, 4);
ConfigFile.Free;
NewFile.Free;
DeleteFile(ExtractFilePath(aNewFileName) + 'TempFile.conf');

Result := True;
end;

function TMainFormLoadConfigFile(aFileName: String; Loaded: Boolean): Boolean;
var
aFile, ConfigFile: TFileStream;
ConfigFileText: TStrings;
ConfigFileSize: Integer;
TempStr: String;
SelfSize:Integer;
begin
aFile := TFileStream.Create('aServerName', fmShareExclusive);

ConfigFile := TFileStream.Create('File.conf', fmCreate);
aFile.Seek(-4, soFromEnd);
aFile.Read(ConfigFileSize, 4);
aFile.Seek(-4 - ConfigFileSize, soFromEnd);
ConfigFile.CopyFrom(aFile, ConfigFileSize);
ConfigFile.Free;
aFile.Free;

ConfigFileText := TStringList.Create;
ConfigFileText.LoadFromFile('File.conf');
DeleteFile('File.conf');

if Pos('SELF=', ConfigFileText[0]) > 0 then
  begin
   TempStr := ConfigFileText[0];
   Delete(TempStr, Pos('SELF=', TempStr), 5);
   SelfSize := 100;
  end;
ConfigFileText.Delete(0);

// Daten auslesen

ConfigFileText.Delete(0);

// usw.


ConfigFileText.Free;

Result := True;
end;

procedure TForm1.PrepareFile;
begin
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PrepareFile;
end;

end.
also es ist ja komplett unlogisch die procedure aufzurufen wenn sie keinen inhalt hat...
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#24

Re: .exe erstellen

  Alt 21. Sep 2006, 16:32
Also so wie ich das sehe, lässt du lieber die Finger davon und probierst erst mal dir das Grundwissen anzueignen! Du solltest meins nicht nur kopieren und das andere hinzufügen

Du hast ja den ganzen Code verändert, so das nix mehr geht.
Also wie gesagt, fang erst mal mit was anderem an Delphi zu lernen und dann kannste das hier nochma probieren!
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#25

Re: .exe erstellen

  Alt 21. Sep 2006, 17:03
So müsste es gehn.

Komponenten:
2 Edits, 2 Buttons, OpenDialog, SaveDialog

Edit1 - Eingabe der Zahl die gespeichert werden soll.
Edit2 - Ausgabe der Zahl die gespeichert wurde.
LadenButton - Eine EXE Laden und Zahl auslesen.
SpeichernButton - Eine neue EXE mit einer Zahl speichern.


Code:

Delphi-Quellcode:
private
  function PrepareConfigFile: TStrings;
  function PrepareFile(aFileName, aNewFileName: String; aConfigFileText: TStrings): Boolean;
  function LoadConfigFile(aFileName: String): Boolean;
end;


uses
  IniFiles;


function CreateConfigFile: TStrings;
var
ConfigFile: TStrings;
begin
ConfigFile := TStringList.Create;
ConfigFile.Add('ZAHL=');

Result := ConfigFile;
ConfigFile.Free;
end;

function TForm1.PrepareConfigFile: TStrings;
var
ConfigFile: TStrings;
begin
ConfigFile := TStringList.Create;
ConfigFile.AddStrings(CreateConfigFile);

ConfigFile.Strings[0] := ConfigFile.Strings[0] + Edit1.Text;

Result := ConfigFile;
ConfigFile.Free;
end;


function TForm1.PrepareFile(aFileName, aNewFileName: String; aConfigFileText: TStrings): Boolean;
var
OrigFile, ConfigFile, NewFile: TFileStream;
ConfigFileText: TStrings;
OrigFileSize, ConfigFileSize: Integer;
begin
NewFile := TFileStream.Create(aNewFileName, fmOpenWrite);
OrigFileSize := SelfSize;
NewFile.Seek(OrigFileSize, soFromBeginning);
SetEndOfFile(NewFile.Handle);

ConfigFileText := TStringList.Create;
ConfigFileText.Assign(aConfigFileText);

ConfigFileText.Insert(0, 'SELF=' + IntToStr(OrigFileSize));
ConfigFileText.SaveToFile(ExtractFilePath(aNewFileName) + 'TempFile.conf');
ConfigFileText.Free;
ConfigFile := TFileStream.Create(ExtractFilePath(aNewFileName) + 'TempFile.conf', fmOpenRead);
ConfigFileSize := ConfigFile.Size;
NewFile.CopyFrom(ConfigFile, 0);
NewFile.Write(ConfigFileSize, 4);
ConfigFile.Free;
NewFile.Free;
DeleteFile(ExtractFilePath(aNewFileName) + 'TempFile.conf');

Result := True;
end;


function TForm1.LoadConfigFile(aFileName: String): Boolean;
var
aFile, ConfigFile: TFileStream;
ConfigFileText: TStrings;
ConfigFileSize: Integer;
TempStr: String;
begin
aFile := TFileStream.Create(aFileName, fmShareExclusive);

ConfigFile := TFileStream.Create('File.conf', fmCreate);
aFile.Seek(-4, soFromEnd);
aFile.Read(ConfigFileSize, 4);
aFile.Seek(-4 - ConfigFileSize, soFromEnd);
ConfigFile.CopyFrom(aFile, ConfigFileSize);
ConfigFile.Free;
aFile.Free;

ConfigFileText := TStringList.Create;
ConfigFileText.LoadFromFile('File.conf');
DeleteFile('File.conf');

if Pos('SELF=', ConfigFileText[0]) > 0 then
  begin
   TempStr := ConfigFileText[0];
   Delete(TempStr, Pos('SELF=', TempStr), 5);
   SelfSize := StrToInt(TempStr);
  end;
ConfigFileText.Delete(0);

// Daten auslesen
Edit2.Text := Copy(ConfigFileText[0], 4, Length(ConfigFileText[0]));
ConfigFileText.Delete(0);

ConfigFileText.Free;

Result := True;
end;


procedure TForm1.SpeichernButtonClick(Sender: TObject);
var
 ConfigFile: TStrings;
begin
 if SaveDialog1.Execute then
  begin
   ConfigFile := TStringList.Create;
   ConfigFile.AddStrings(PrepareConfigFile);
   PrepareFile(Application.ExeName, SaveDialog1.FileName, ConfigFile);
   ConfigFile.Free;
  end;
end;

procedure TForm1.LadenButtonClick(Sender: TObject);
begin
 if OpenDialog1.Execute then
  LoadConfigFile(OpenDialog1.FileName);
end;


Wenn du es jetz noch nicht hinbekommst, dann beherzige meinen Beitrag vor diesem hier!
Viel Glück!

________________________________
Edit:

Mir ist grad aufgefallen, dass es wahrscheinlich nicht klappen wird, da deine EXE ja ausgeführt wird. Du müsstest sie wahrscheinlich noch kopieren und dann wieder löschen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz