Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Seite 2 von 3     12 3      

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