Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit exe-datei
henny - Di 02.06.09 11:21
Titel: Problem mit exe-datei
Hallo zusammen,
wenn ich ein selbst programmiertes programm z.b. auf den namen hallo.exe speicher
und es dann starten möchte dann kommt diese fehlermeldung:
Die ntvdm-cpu hat einen ungültigen befehl entdeckt.
Was muss ich tun das diese fehlermeldung nicht mehr kommt?
danke schonmal im voraus!
Delete - Di 02.06.09 11:30
Zeig mal den Quellcode. Und was meinst du mit "programm z.b. auf den namen hallo.exe speicher"? Du musst den Quellcode auch kompilieren.
henny - Di 02.06.09 11:51
Und was muss ich in den Quellcode reinschreiben?
Gausi - Di 02.06.09 11:53
henny hat folgendes geschrieben : |
| Und was muss ich in den Quellcode reinschreiben? |
Das kommt darauf an, was das Programm machen soll ... :nixweiss:
Robert.Wachtel - Di 02.06.09 11:55
henny hat folgendes geschrieben : |
| Und was muss ich in den Quellcode reinschreiben? |
:autsch:
Woher sollen wir das denn wissen?
Du zeigst nicht, wie Dein bisheriger Quellcode aussieht und verschweigst uns, was Du bisher gemacht hast.
Darüber hinaus sollen wir dann wahrscheinlich auch noch erraten, mit welcher Delphi-Version auf welchem Betriebssystem Du arbeitest?
henny - Di 02.06.09 12:03
Also mein quellcode sieht so aus:
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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| procedure TForm1.Button1Click(Sender: TObject); var a,b: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); label2.caption := FloatToStr(a+b); end;
procedure TForm1.Button2Click(Sender: TObject); var a,b: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); label2.caption := FloatToStr(a-b); end;
procedure TForm1.Button3Click(Sender: TObject); var a,b: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); label2.caption := FloatToStr(a/b); end;
procedure TForm1.Button4Click(Sender: TObject); var a,b: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); label2.caption := FloatToStr(a*b); end;
procedure TForm1.FormCreate(Sender: TObject); begin randomize; zufall := random(1000)+1; randomize; diagnose := tstringlist.create;
randomize; randomize; Zahl1 := random(10000); Zahl2 := random(10000);
end;
procedure TForm1.Button5Click(Sender: TObject); begin
try edit3.SetFocus;
Eingabe := strtoint (edit3.Text); if Eingabe = zufall then label4.Caption := 'Grins, das war richtig!'; if Eingabe < zufall then label4.Caption := 'Deine Zahl ist zu klein!'; if Eingabe > zufall then label4.Caption := 'Deine Zahl ist zu groß!'; except label4.Caption := 'Vollidiot du sollst eine Zahl eingeben!'; end;
end;
procedure TForm1.Button6Click(Sender: TObject); begin edit3.SetFocus; label4.caption := 'Ich denke mir eine neue Zahl zwischen 1 und 1000!'; label5.Caption := 'Rate mal!';
zufall := random(1000) + 1;
end;
procedure TForm1.Button7Click(Sender: TObject); begin Button7.Left := random (ClientWidth-Button1.Width); Button7.Top := random (ClientHeight-Button1.Height); end;
procedure TForm1.Button8Click(Sender: TObject); begin randomize; zahl1:=random(10000); zahl2:=random(10000);
end;
end. |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Robert.Wachtel - Di 02.06.09 12:06
Ad eins gibt es hier Delphi-Code-Tags, die doch bitte benutzen magst und ad zwei lässt sich dieser Quellcode ja noch nichtmal kompilieren. Er kann also nicht vollständig sein.
Meine anderen Hinweise hast Du ja intelligenterweise ignoriert.
henny - Di 02.06.09 12:13
ups den anfang des quellcodes habe ich vergessen:
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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| unit Vollprogramm;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit3: TEdit;
Label6: TLabel; Button6: TButton; Button7: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); private public end;
var Form1: TForm1; ergebnis : integer; eingabe, zufall: integer; diagnose : tstringlist; nr:integer; Zahl1,zahl2: integer;
implementation
{$R *.dfm} |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Robert.Wachtel - Di 02.06.09 12:18
Liest Du eigentlich, was ich schreibe?
Gausi - Di 02.06.09 12:30
Der Code sieht eigentlich ok aus. Das einzige, was mir auf Anhieb auffällt, ist die mehrfache Verwendung von randomize - das sollte man nur einmal am Anfang aufrufen, danach nicht mehr.
Es bleibt die Frage nach dem Betriebssystem und der verwendeten Delphi-Version.
henny - Di 02.06.09 12:40
Also mein betriebsystem ist windows xp und ich verwende delphi7.
Xentar - Di 02.06.09 13:03
Was passiert, wenn du das Programm aus Delphi heraus startest?
Timosch - Di 02.06.09 13:11
henny hat folgendes geschrieben : |
Hallo zusammen,
wenn ich ein selbst programmiertes programm z.b. auf den namen hallo.exe speicher
und es dann starten möchte dann kommt diese fehlermeldung:
Die ntvdm-cpu hat einen ungültigen befehl entdeckt.
Was muss ich tun das diese fehlermeldung nicht mehr kommt?
danke schonmal im voraus! |
Du speicherst aber nicht etwa den Quelltext direkt in eine exe-Datei?? Wenn doch, dann würde ich dir erstmal nahelegen, die absoluten IT-Grundlagen zu lernen, bevor du programmieren willst...
Ein Programm wird als Quelltext geschrieben und muss dann von einem Compiler in Maschinensprache übersetzt werden. Erst dann kann man es ausführen.
Verzeiht mir, dass ich hier nicht noch auf Linker, Assembler und alternativ Interpreter eingehe...
Regan - Di 02.06.09 13:14
Warum hängst du nicht einfach mal den gesamten Projektordner an? Das wäre doch das aller einfachste. Dann können wir mal schauen, was falsch ist.
Sinspin - Di 02.06.09 14:49
Also, NTVDM deutet für mich auf eine DOS Anwendung hin. Wenn in deiner Pojektdatei (die .DPR) irgendsowas wie {$APPTYPE CONSOLE} steht dann sollte mich die Meldung nicht wundern.
Nebenbei, du erzeugst ein schönes Speicherloch wenn du eine TStringList anlegst, diese aber nicht wieder freigibst. Da du sie im OnCreate (FormCreate) anlegst sollte sie im OnDestroy wieder freigegeben werden.
Martok - Di 02.06.09 15:11
NTVDM ist alles, was .exe heißt, aber keinen 32-Bit-PE-Header hat.
Wie gesagt: du wirst wohl die .dpr einfach in .exe umbenannt haben, das geht logischerweise nicht. Du musst die Echse schon durch Compilieren erstellen :roll:
EDIT @
Robert.Wachtel unter mir:
Jap, natürlich. Ist nur ein Vermutung, wenn auch eine relativ wahrscheinliche.
Robert.Wachtel - Di 02.06.09 15:22
Martok hat folgendes geschrieben : |
| [...] Wie gesagt: du wirst wohl die .dpr einfach in .exe umbenannt haben, [...] |
Auch wenn alles den Anschein hat und ich das ebenso vermute, so ist es dennoch eine reine Mutmaßung und wir sollten vielleicht einfach die Stellungnahme des OPs dazu abwarten...
Sinspin - Di 02.06.09 15:29
Leute! Liegt das am Wetter?
Auch wenn es sich wohl um einen Anfänger handelt muss man doch nicht immer gleich davon ausgehen das man es mit einem Idioten zu tun hat! Und vorallem, nicht alle auf einmal!
Es ist ja nichtmal die erste Frage die sie/er? hier gestellt hat. Also wird sicher klar sein wie man vom Quelltext zum ausführbaren Programm kommt.
Ich spiele nicht gerne den Moralapostel, aber bitte zügelt eucht etwas und seid freundlich. Nebenbei, ihr habt auch mal angefangen!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!