Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Quellcode wird nicht compiliert. Compiler meldet keinen Fehler. (https://www.delphipraxis.net/156239-quellcode-wird-nicht-compiliert-compiler-meldet-keinen-fehler.html)

FriendOfDelphi 24. Nov 2010 16:13

Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Hallo Allerseits!

was mache ich falsch, wenn Teile des Quellcodes vom Compiler nicht compiliert werden?

Normalerweise drücke ich "strg + F9" und der gesamte Quellcode wird compiliert.
An den blauen Punkten auf der linken Seite erkennt man ja, welche Zeilen vom Compiler berücksichtigt wurden.

Der Compiler meldet keinen Fehler beim copilieren.
Aber nur das letzte "end" erhält den blauen Punkt.

Habt ihr eine Idee?

mkinzler 24. Nov 2010 16:16

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Existiert ein Projekt?

stahli 24. Nov 2010 16:19

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Der Compiler ignoriert u.U. Zeilen, die "nutzlos" sind.
Delphi-Quellcode:
I := 0;
wird u.U. ignoriert, wenn I nicht mehr verwendet wird.

FriendOfDelphi 24. Nov 2010 16:24

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von mkinzler (Beitrag 1063764)
Existiert ein Projekt?

Ja.
Damit alle notwendigen Dateien erzeugt werden, gehe ich immer so vor, dass ich auf "\Datei\Alles speichern" klicke.
Delphi fragt dann zuerst nach dem Unitnamen und danach nach dem Projektnamen und speichert die Dateien ab.

FriendOfDelphi 24. Nov 2010 16:29

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von stahli (Beitrag 1063765)
Der Compiler ignoriert u.U. Zeilen, die "nutzlos" sind.
Delphi-Quellcode:
I := 0;
wird u.U. ignoriert, wenn I nicht mehr verwendet wird.

Das würde bedeuten, dass der gesamte Quellcode sinnfrei ist.
Das kann wiederum nicht sein.

Aber vielleicht ist bei der Vorgehensweise etwas schief gelaufen.
Ich habe zunächst einen Quellcode erzeugt und diesen erfoglreich ausprobiert.
Nun bin ich dabei, diesen Quellcode in eine eigene Unit in eine Klasse zu verfrachten.
Und damit trat das beschriebene Problem auf.

stahli 24. Nov 2010 16:37

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063770)
Das würde bedeuten, dass der gesamte Quellcode sinnfrei ist.

Ok, das habe ich aber nicht gesagt :mrgreen:

Schau mal, ob Du noch eine alte pas oder dcu herumliegen hast, die der Compiler verwendet. Ich hatte das früher auch mal, dass ich im Editor eine pas in Arbeit hatte, der Compiler aber noch eine ältere Kopie benutzt hat. Das führte zu ähnlichen Effekten.

Ansonsten zeig mal einen Quelltext...

Bummi 24. Nov 2010 16:44

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
funktioniert Projekt erzeugen statt kompilieren..?

FriendOfDelphi 24. Nov 2010 16:48

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von Bummi (Beitrag 1063776)
funktioniert Projekt erzeugen statt kompilieren..?

Du meinst sicherlich "\Projekt\Alle Projekte erzeugen".
Das ändert nichts.
Die "blauen Punkte" fehlen nach wie vor.

mquadrat 24. Nov 2010 17:13

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Was passiert denn wenn du absichtlich einen Fehler einbaust? Meckert der Compiler dann?

blauweiss 24. Nov 2010 17:24

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von mquadrat (Beitrag 1063783)
Was passiert denn wenn du absichtlich einen Fehler einbaust? Meckert der Compiler dann?

Höchstwahrscheinlich JA (ich wette um 1 Bier), wenn das letzte "end" einen blauen Punkt erhalten hatte...
Meine Vermutung: Du (FriendOfDelphi) hast beim Aufteilen in eine andere Unit den Code irgendwie KOPIERT anstatt zu VERSCHIEBEN.
Klammere doch einfach die Codezeilen aus, die keine blauen Punkte bekommen haben. Wenn das Projekt dann immer noch kompiliert werden kann (ich wette ein 2. Bier, daß JA), dann kommst Du der Sache schon näher...

Gruß
blauweiss

himitsu 24. Nov 2010 18:15

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Es gibt im Grunde nur 3-4 Gründe, warum diese Punkte fehlen.

- es gibt einen Fehler im Quellcode (es konnte nicht kompiliert werden, aber da meckert der Compiler ja rum)

- die Funktionen/Befehle werden nirgendwo aufgerufen (was man nicht verwendet, das wird nicht mit einkompiliert)

- die ganze Unit wird nicht verwendet (könnte auch sein, daß eine andere Unit stattdessen genommen wird)
> dieses läßt sich rausbekommen, indem man mal einen Fehler in den Code einbaut (wie's auch schon gesagt wurde)

- oder man hat die Debuginformationen deaktiviert (entweder für die entsprechenden Codesstellen oder im gesammten Projekt)
> ohne Debuginfos fehlt eine Zuordnung zwischen Quelltext und kompiliertem Code


So, und nun mußt du nur noch rausbekommen, welcher dieser Punkte bei dir zutrifft.

blauweiss 25. Nov 2010 09:56

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063763)
Der Compiler meldet keinen Fehler beim copilieren.
Aber nur das letzte "end" erhält den blauen Punkt.

In einem Krimi würde der Kommissar genau hier die entscheidenden Indizien finden.
Blauer Punkt beim "end"
-> die Unit wird im Projekt mitkompiliert.
Keine blauen Punkte sonstwo in dieser Unit
-> der Code wird nicht aufgerufen (weil z.B. die Klasse nirgendwo im Projekt instanziiert wird).

Gruß
blauweiss

FriendOfDelphi 25. Nov 2010 10:48

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von himitsu (Beitrag 1063797)
Es gibt im Grunde nur 3-4 Gründe, warum diese Punkte fehlen.

- es gibt einen Fehler im Quellcode (es konnte nicht kompiliert werden, aber da meckert der Compiler ja rum)

Ich möchte diesen Punkt zwar nicht grundsätzlich ausschließen, aber der eigentliche Code hat im "Stand Alone Programm", also ohne eigene Unit und ohne eigene Klasse, ja funktioniert. Und der Compiler meckert auch nicht.
Zitat:

Zitat von himitsu (Beitrag 1063797)
- die Funktionen/Befehle werden nirgendwo aufgerufen (was man nicht verwendet, das wird nicht mit einkompiliert)

Das kann ich nicht so eindeutig sagen. Innerhalb der Unit/der Klasse habe ich 2 Prozeduren im "private-Bereich", sowie einen "constructor" und einen "destructor" im "public-Bereich" deklariert und im "implementation-Bereich" definiert. Konstruktor und Destruktor rufen innerhalb der Klasse je eine der beiden "privaten" Prozeduren auf.
In einer zweiten, zunächst einmal nur Test-Unit, wird dann ein Objekt der Klasse instanziiert und die Methode "Create" beim Erzeugen des Formulars und "Destroy" beim Auflösen des Formulars verwendet (die beiden Methoden aus dem "public-Bereich"). Mehr mache ich erst einmal nicht.
Beim Aufrufen des Programms wird aber folgender Fehler angezeigt: "Im Projekt Soundso.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0043E34B in Modul 'Soundso.exe'. Lesen von Adresse 00000000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."
Zitat:

Zitat von himitsu (Beitrag 1063797)
- die ganze Unit wird nicht verwendet (könnte auch sein, daß eine andere Unit stattdessen genommen wird)
> dieses läßt sich rausbekommen, indem man mal einen Fehler in den Code einbaut (wie's auch schon gesagt wurde)

Sobald ich absichtlich einen Fehler in den Quellcode einbaue, wird dieser auch vom Compiler angemeckert.
Zitat:

Zitat von himitsu (Beitrag 1063797)
- oder man hat die Debuginformationen deaktiviert (entweder für die entsprechenden Codesstellen oder im gesammten Projekt)
> ohne Debuginfos fehlt eine Zuordnung zwischen Quelltext und kompiliertem Code

Nein, die Debuginformationen habe ich nicht deaktiviert, sonst würde er ja nie Fehler anzeigen.
Zitat:

Zitat von himitsu (Beitrag 1063797)
So, und nun mußt du nur noch rausbekommen, welcher dieser Punkte bei dir zutrifft.

Ich glaube ich mache einen anderen Fehler. Nachdem der oben beschriebene Fehler vom Compiler angezeigt wurde, habe ich nach diesem gesucht und bin auf die fehlenden Punkte in der "Klassen-Unit" gestoßen und habe deshalb an dieser Stelle gesucht.

FriendOfDelphi 25. Nov 2010 10:55

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von blauweiss (Beitrag 1063900)
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063763)
Der Compiler meldet keinen Fehler beim copilieren.
Aber nur das letzte "end" erhält den blauen Punkt.

In einem Krimi würde der Kommissar genau hier die entscheidenden Indizien finden.
Blauer Punkt beim "end"
-> die Unit wird im Projekt mitkompiliert.
Keine blauen Punkte sonstwo in dieser Unit
-> der Code wird nicht aufgerufen (weil z.B. die Klasse nirgendwo im Projekt instanziiert wird).

Gruß
blauweiss

Wie ich schon in der Antwort an "himitsu" geschrieben habe wird, wenn ich absichtlich einen Fehler im Quellcode der Unit einbaue, dieser auch vom Compiler angemeckert. Das läßt darauf schließen, dass diese auch mitkompiliert wird.
Aber ich instanziiere in einer zweiten Test-Unit ein Objekt der Klasse. Wahrscheinlich mache ich hier, bzw. im Konstruktor etwas falsch.

Luckie 25. Nov 2010 10:57

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063922)
Wahrscheinlich mache ich hier, bzw. im Konstruktor etwas falsch.

Was müssen wir tun, damit du ihn uns zeigst?

FriendOfDelphi 25. Nov 2010 11:18

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von Luckie (Beitrag 1063923)
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063922)
Wahrscheinlich mache ich hier, bzw. im Konstruktor etwas falsch.

Was müssen wir tun, damit du ihn uns zeigst?

Lach :-D
Gar nichts, außer vielleicht zu sagen, in welcher Art und weise ich ihn senden soll.
Möchte mir nicht wieder einen "Rüffel" holen, dass ich irgendetwas falsch gemacht habe und unwissentlich gegen irgendwelche Forumsregeln verstoßen habe. :?
Dafür ist mir das hier zu wichtig. Hier im Forum herrscht ein gewisses Niveau vor, das woanders nicht so ist und ich daher nicht missen möchte.
Das Programm besteht, wie gesagt aus zwei Units.
Soll ich es als ZIP-Datei anhängen, oder beide Quellcodes als Text senden?

Luckie 25. Nov 2010 11:24

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063928)
Zitat:

Zitat von Luckie (Beitrag 1063923)
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063922)
Wahrscheinlich mache ich hier, bzw. im Konstruktor etwas falsch.

Was müssen wir tun, damit du ihn uns zeigst?

Lach :-D
Gar nichts, außer vielleicht zu sagen, in welcher Art und weise ich ihn senden soll.

Wie wäre es mit posten des relevanten Codeteiles?

FriendOfDelphi 25. Nov 2010 12:00

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Hier Teile der "Test-Unit":
Delphi-Quellcode:
[...schnipp...]

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  UNotifikationen;                                                        //<-- die verwendete, eigene Unit

[...schnipp...]

var
  Form1: TForm1;
  Test: TNotifikationen; //<-- die verwendete Klasse aus eigenen Unit

[...schnipp...]

procedure TForm1.FormCreate(Sender: TObject); //<-- und die beiden Methoden aus der Klasse
begin
  Test.Create(self);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Test.Destroy;
end;

end.
Hier Teile der eigenen Unit:
Delphi-Quellcode:
[...schnipp...]

type
  TNotifikationen = class(TWinControl)
    procedure WMAdsDeviceNotificationSRr( var Message: TMessage );
    message WM_ADSDEVICENOTIFICATIONSRr;
  private
    { Private-Deklarationen }
    LocalAddr     : TAmsAddr;
    procedure AdsOpen();
    procedure AdsClose();
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy;
  end;

[...schnipp...]
procedure TNotifikationen.AdsOpen();
var
  VarName : PChar;
begin
[...tue irgendwas ...]
end;

[...schnipp...]

procedure TNotifikationen.AdsClose();
begin
[...tue irgendwas ...]
end;

[...schnipp...]

constructor TNotifikationen.Create;
begin
  AdsOpen();
end;

destructor TNotifikationen.Destroy;
begin
  AdsClose();
end;

[...schnipp...]
Ist das so nachvollziehbar und ein Fehler erkennar?

Luckie 25. Nov 2010 12:02

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Eine Instanz einer Klasse erstellt man so:
Delphi-Quellcode:
obj := TMyClass.Create;

stahli 25. Nov 2010 12:07

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Die Instanz einer Klasse weist man so zu:
Delphi-Quellcode:
Test := TTest.Create(Self);


Im Create und Destroy Deiner Komponente fehlen das inherited.
Sie wird also nicht erzeugt und nicht aufgelöst.

Hinter Deinem Destructor fehlt das override.

Die Freigabe der Komponente (im FormDestroy) sollte man über Test.Free veranlassen.
(Bzw. kann diese Freigabe an der Stelle entfallen, da das Formular Deine Komponente als deren Eigentümer automatisch frei gibt.)

Schau mal, ob Dich das schon weiter bringt...

FriendOfDelphi 25. Nov 2010 13:31

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von Luckie (Beitrag 1063949)
Eine Instanz einer Klasse erstellt man so:
Delphi-Quellcode:
obj := TMyClass.Create;

Das war der entscheidende Hinweis.
Die Quellcode in der Unit wird jetzt vollständig mitkompiliert und die "blauen Punkte" sind da! :-D

FriendOfDelphi 25. Nov 2010 13:36

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von stahli (Beitrag 1063951)
Die Instanz einer Klasse weist man so zu:
Delphi-Quellcode:
Test := TTest.Create(Self);
Im Create und Destroy Deiner Komponente fehlen das inherited.
Sie wird also nicht erzeugt und nicht aufgelöst.

Ich habe die fehlenden "inherited" ergänzt. Aber auch mit Hilfe der Delphi-Hilfe nicht genau verstanden, was das macht.
Zitat:

Zitat von stahli (Beitrag 1063951)
Hinter Deinem Destructor fehlt das override.

Habe ich ebenfalls ergänzt.
Zitat:

Zitat von stahli (Beitrag 1063951)
Die Freigabe der Komponente (im FormDestroy) sollte man über Test.Free veranlassen.
(Bzw. kann diese Freigabe an der Stelle entfallen, da das Formular Deine Komponente als deren Eigentümer automatisch frei gibt.)

Schau mal, ob Dich das schon weiter bringt...

Die Methode "Free" scheint ja auch ohne mein Zutun zu existieren.
Heißt das, dass ich gar keinen Destruktor selber machen muss?

DeddyH 25. Nov 2010 13:42

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
inherited ruft die gleichnamige Methode der Vorfahrklasse auf. Und den Destruktor musst Du nur überschreiben, wenn Du selbst Speicher anforderst (z.B. indem Du Instanzen von Klassen erzeugst) und diesen beim Zerstören wieder freigeben musst. Aber Vorsicht: im Destruktor gehört das inherited immer in die letzte Zeile.

stahli 25. Nov 2010 14:12

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Free ruft intern Destroy auf. Destroy sollte man nicht direkt aufrufen.

FriendOfDelphi 25. Nov 2010 14:13

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Ihr seid echt super. Vielen Dank.

Jetzt geht es ins "Eingemachte" meiner Umwandlung von "Stand-Alone-Programm" in eigene Unit/Klasse.
Ich habe jetzt eine neue Fehlermeldung; bin mir aber nicht ganz sicher, ob ich dafür ein neues Thema aufmachen soll, oder nicht, da das ürsprüngliche Thema ja abgeschlossen ist...

Was sagt denn der Moderator dazu?

DeddyH 25. Nov 2010 14:20

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Auch wenn ich kein Mod bin: neue Frage, neuer Thread ;)

Luckie 25. Nov 2010 14:39

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1063979)
Ich habe jetzt eine neue Fehlermeldung; bin mir aber nicht ganz sicher, ob ich dafür ein neues Thema aufmachen soll, oder nicht, da das ürsprüngliche Thema ja abgeschlossen ist...

So lange du uns die Frage oder das Problem nicht nennst...

FriendOfDelphi 25. Nov 2010 16:09

AW: Quellcode wird nicht compiliert. Compiler meldet keinen Fehler.
 
Ich habe dazu unter "\Delphi-PRAXiS\Sprachen und Entwicklungsumgebungen\Object-Pascal / Delphi-Language" ein neues Thema "Aufgerufene Methode erkennt aufrufendes Objekt nicht" eröffnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 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