![]() |
Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hallo,
folgende Codedeklaration(steht alles in einer Unit):
Delphi-Quellcode:
Wenn ich das Projekt kompiliere, wird keine Fehlermeldung ausgegeben, aber es wird nicht der Inhalt der Prozedur von TsicherungCad.kontrolle compiliert. irgendwie ignoriert der Compilier den Code. Ich erkenne es folgendermaßen: Wenn ich in der Zeile, wo exit steht, einen Haltepunkt setzen will, ist in dem roten Kreis ein gelbes Kreuz. Wenn es vom Kompilier erkannt wurde als auszuführenden Code, dann ist in Delphi 5 (benutze ich) immer noch ein blauer Punkt neben der Zeile, was hier nicht der Fall ist. Nun meine Frage, wie schaffe ich es, dass Delphi diesen Codeabschnitt kompiliert? Ich stehe vor einem Rätsel und kann es mir nicht erklären.
type TSicherung = class(TObject)
public procedure kontrolle; end; type TsicherungCad = class(TSicherung) public procedure kontrolle; end; .... procedure TSicherungCad.kontrolle; begin exit; end; procedure TSicherung.kontrolle; begin exit; end; Beste Grüße und danke im voraus für Eure Hilfe Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Eventuell solltest du mal Code reinschreiben, der auch was macht. :roll:
|
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hallo,
es steht schon Code drin. Ich habe nur exit; reingeschrieben, damit es nicht zu unübersichtlich wird. Im Original sieht es so aus:
Delphi-Quellcode:
Beste Grüße
procedure TsicherungCad.kontrolle;
begin if FindWindow(nil, 'CAD-Hauptprogramm') = 0 then begin Sicherung.haupt_aktiv(false); Sicherung.sichern(sPfadLokal); if boNetz then Sicherung.sichern(sPfadNetz); end //Ansonsten warten, bis Cadkontrolle geschlossen ist else begin Sicherung.haupt_aktiv(true); TWarten.enabled:=true; SendStringTohandle(FindWindow(nil, 'CAD-Hauptprogramm'), 'Schließen'); end; end; Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Wird der Code auch aufgerufen im Programm?
|
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Interessant wird, wenn wir die Stelle zu sehen bekommen, wo TSicherungCad.Controlle aufgerufen wird. Du deklarierst 2 Klassen mit ein und derselben Procedure ohne zu zu überschreiben etc.
Wo ist da der Sinn ? Code der nicht aufgerufen wird, ignoriert der Linker. Dann funktioniert auch kein Breakpoint. grez msch |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Du leitest TSicherungCad von TSicherung ab, welches schon eine Methode Kontrolle hat, und deklarierst in TSicherungCad dann nochmal diese Methode Kontrolle.
Fehlt Dir da nicht ein inherited oder reintroduce oder irgendsowas (aus dem Kopf) ??!? Roderich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Außerdem: Da nur ein Exit in der Prozedur drinne steht, könnte ich mir vorstelllen, dass die Codeoptimierung von Delphi dies entfernt, da es ja unnötig ist.
|
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
@Chewie: Schon mal etwas weiter, als bis zum ersten Posting gelesen? :roll:
|
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Ja, hab ich, aber ich hab es so verstanden, dass er auch beim Testen nur Exit drinnehatte und das Exit nicht nur fürs Forum geschrieben hat.
|
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hallo,
vielleicht noch mal ein paar Sätze: Ich habe eine Klasse TSicherung mit verschiedenen Eigenschaften und Methoden (Bsp.: construktor, destruktor). Habe ich aber der Einfachheit hier nicht angegeben. Von dieser Klasse erzeuge ich weitere. TsicherungCad und TSicherungPHP sind weitere Klassen, die von TSicherung alle Methoden und Eigenaschften erben. Nun will ich bei den klassen TSicherungphp und TSicherungCad unterschiedlichen Code in der Prozedur kontrolle schreiben. Das will ich errreichen, in dem ich einfach die Prozedur bei den verschiedenen Klasen überschreibe. Ich habe in der Schule das auch mal so gemacht und da hat es funktioniert. Beste Grüße und schönen Dank für die bisherige rege Beteiliung Ulrich PS: So sieht die Deklaration aus(diesmal nicht zensiert):
Delphi-Quellcode:
type TSicherung = class(TObject)
private LManuellDatum, LAutoDatumLetzte, LAutoDatumNaechste : TLabel; TAuto, TWarten : TTimer; App : TApplication; Sicherung : TKopieren; iInterval, iBereinigenInterval : integer; boNetz, boBereinigen : boolean; sPfadLokal, SPfadNetz, sTypart : string; procedure TAutoOnTimer(Sender : TObject); procedure SendStringToHandle(Wnd: Hwnd; const AText: string); procedure TWartenOnTimer (Sender : TObject); public constructor create (GStatus : TGauge; LDatei, LAutoLetzteDatum, LAutoNaechDatum, LManDatum : TLabel; Applicat : TApplication; Formular : TForm; Data : TDatabase; Query : TQuery; sTyp : string); destructor destroy; procedure kontrolle; procedure sichern; procedure einstellungen_aktualisieren; end; type TsicherungCad = class(TSicherung) public procedure kontrolle; end; type TsicherungPHP = class(TSicherung) public procedure kontrolle; end; |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Zitat:
|
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hilfe,
Delphi kompliert es immer noch nicht, obwohl ich genau wie Rumpi es geschrieben hat inherited kontrolle; und dergleichen eingefügt habe. Er macht es nicht. Ich verstehe es nicht. cu Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Moin Ulrich,
hast Du schon mal versucht die vom Projekt erzeugten Dateien (DCU und EXE) zu löschen (Sicherung nicht vergessen!), und dann das Projekt neu erzeugen zu lassen? |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hallo,
auf die Idee bin ich auch ncoh gekommen und es hat nichts gebracht. Hast Du ncoh eine Idee? Beste Grüße Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Moin Ulrich,
nein, jetzt fällt mir so auch nichts mehr ein... Kannst Du mal die Sourcen hier anhängen (ohne DCU/EXE)? Am besten wohl gezippt. Ich könnte dann mal sehen was der Compiler bei mir macht. Ich hab' ja auch D5Pro. |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hi,
anbei das Projekt. Die Projektdatei und die dazugehörigen-Dateien müssen unter c:\buco_bwp\Server liegen, da es sonst zu Fehlern kommt. Ich habe gerade Delphi neu installiert und gemerkt, das da irgendetwas nicht simmt. Ich erzeuge noch ein weiteres Objekt namens Sicherung. Wenn ich das in der Deklaration entfernt habe (auskommentiert), dann hat er trotzdem nicht gemekcert bei Aufrufen wie sicherung.free; Was nun überhaupt nicht sein darf. Beste Grüße Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hi,
kurzer Nachtrag: Ihr müßt in der Unit Usicherung nachschauen. Alle anderen sind uninteressant. Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Die Lösung ist einfach. Die Methode Kontrolle von TSicherungCad wurde "wegoptimiert". Du hast im gesamten Projekt nicht eine Instanz dieser Klasse erstellt, also hat Delphi es auch nicht für nötig erachtet diese ins Projekt mit einzubinden ;-)
HINWEIS aus
Delphi-Quellcode:
unbedingt
public
constructor create (GStatus : TGauge; LDatei, LAutoLetzteDatum, LAutoNaechDatum, LManDatum : TLabel; Applicat : TApplication; Formular : TForm; Data : TDatabase; Query : TQuery; sTyp : string); destructor destroy; procedure kontrolle; virtual; procedure sichern; procedure einstellungen_aktualisieren;
Code:
machen.
public
constructor create (GStatus : TGauge; LDatei, LAutoLetzteDatum, LAutoNaechDatum, LManDatum : TLabel; Applicat : TApplication; Formular : TForm; Data : TDatabase; Query : TQuery; sTyp : string); destructor destroy; [color=#ff0000]override;[/color] procedure kontrolle; virtual; procedure sichern; procedure einstellungen_aktualisieren; ...:cat:... |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Mein D7 nimmt's
nur das die *.res Datei erzeugt werden musste. mfg Rumpi |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hi,
Mensch, so einfach und dennoch so schwierig. Beim ganzen rum experimentieren hatte ich beim erzeugen die Klasse in TSciherung umbenannt. Vorher stand da auch TsicherungCad. Aber danke für Deine und Eure Hilfe. ich wäre daran wohl nur mit sehr viel Mühe das geschafft. Recht herzlcihen Dank. Ihr seid ein Super Forum. Beste Grüße Ulrich |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hi,
kleine Tips du hast zum einen immer destructor Detroy; override; // vergessen und zum anderen constructor TXXX.Create; begin inherited Create; .... end; als auch destructor TXXX.Destroy; begin ... inherited Destroy; end; ... Memory leichen! Nicht Destroy aufrufen sondern FXXX.Free; // ruft dann automatisch Destroy ! oder FreeAndNil(FXXX) mfg Rumpi |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Zitat:
Wenn die Frage ausreichen beantwortet ist, bitte noch entsprechend kennezeichnen (oben rechts). Danke. ...:cat:... |
Re: Warum kompiliert Delphi diesen Codeabschnitt nicht???
Hi Rumpi,
habe Deine Tipps noch eingepflegt. Werde mich damit noch mal etwas näher beschäftigen. Danke für die Tipps. Beste Grüße Ulrich |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz