Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Verwendete Unit 'foo' kann nicht kompiliert werden (https://www.delphipraxis.net/173371-verwendete-unit-foo-kann-nicht-kompiliert-werden.html)

Medium 20. Feb 2013 15:29

Delphi-Version: 2007

Verwendete Unit 'foo' kann nicht kompiliert werden
 
Ahoi!

Ich habe eine kleine Komponentensammlung, die für bis D2006 ausgelegt war (zum Zeitpunkt als sie gebaut wurde war das die neuste). Ich muss sie nun in D2007 benutzen. Daher habe ich mir die Packages und Units zur Brust genommen, und das einzige was ich finden konnte waren eine Hand voll Conditionals die explizit die Unit Variants für D7-2006 deklariert haben. Einfach ein Conditional für D2007 zugefügt, und schon ließen sich die Packages kompilieren und installieren.

Die Dinger liegen also in meiner Palette, und scheinen "ready to use" zu sein. Nun öffne ich ein Projekt, welches diese Kompos nutzt, und Erzeuge es spaßeshalbar mal. Und dann trifft mich im Titel genannter Fehler. Was mich dabei irritiert: Die Unit war im Rahmes des Packages völlig problemlos zu kompilieren, und es liegt sogar eine DCU mit Datum von gerade eben im selben Verzeichnis. Warum wird also a) versucht erneut zu kompilieren, und b) warum klappt das in meinem Projekt auf ein Mal nicht mehr, wo es in der selben Instanz von Delphi 20sec vorher mit dem Package noch ging?

Heissen Dank für alle Ideen!

Sir Rufo 20. Feb 2013 20:56

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Hast du den Bibliothekspfad auf die dcu aus dem Package und den Suchpfad auf die Sourcen gelegt?

Medium 20. Feb 2013 22:21

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Ich habe sowohl den Such- als auch den Bibliothekspfad aller vier Verzeichnisse mit den Quellen und den DCUs eingetragen, ja. Anders gesagt, ist schon spät und manchmal drücke ich mich kompliziert aus: DCU und PAS liegen im selben Pfad, und die jeweiligen Pfade sind in beiden Listen vorhanden.

Ich bin soweit auch alle Units der Komponenten durchgegangen, und in keiner lässt sich mehr ein Conditional finden, dass angepasst werden müsste. Und es kompiliert ja auch - nur nicht, wenn ich ein Programm mit den Kompos erzeuge. Lediglich das Package zum installieren der Kompos mag mich. Ich habe, so weit ich das überblicke, auch alle Pfade eingetragen, in denen relevante Quelldateien liegen. Das prüfe ich morgen nochmals genauer. Schade auch, dass Delphi hier nicht mehr Infos liefert als "nö, geht nich" :?

Union 20. Feb 2013 22:26

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Gibt es vorher andere Fehlermeldungen? Oder siehst Du die wegen der ganzen Warnings nicht ;)

Medium 20. Feb 2013 22:40

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Ich bekomme eben leider nur genau diese eine Meldung beim Build. (Ich gehöre zu der zeitverschwenderischen Fraktion, die peinlichst darauf achtet, auch Warnungen stets zu beheben bevor ich einen Build an Kunden gebe :stupid:)

Union 20. Feb 2013 22:47

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Liegt es vielleicht an Deinen überarbeiteten Defines? Dass die Beim Übersetzen der BPL anders gesteuert werden als dann im Projekt?

Medium 20. Feb 2013 23:06

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Hmm, ich habe zu wenig Erfahrung mit Defines, um das beantworten zu können. Wundern würde es mich allerdings.

Im Grunde waren es solche Konstrukte:

Delphi-Quellcode:
implementation
uses
  {$IFDEF VER150} Variants, {$ENDIF}
  {$IFDEF VER160} Variants, {$ENDIF}
  {$IFDEF VER170} Variants, {$ENDIF}
  SomeOtherUnit;
Ich habe dieses dann einfach zu dem gemacht:
Delphi-Quellcode:
implementation
uses
  {$IFDEF VER150} Variants, {$ENDIF}
  {$IFDEF VER160} Variants, {$ENDIF}
  {$IFDEF VER170} Variants, {$ENDIF}
  {$IFDEF VER180} Variants, {$ENDIF}  // <- neu
  SomeOtherUnit;
Mehr war nicht zu ändern um die Packages installieren zu können.

Medium 21. Feb 2013 11:02

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Es gab tatsächlich in einem der 3 Verzeichnisse mit den Quellen noch ein Unterverzeichnis mit einer Hand voll Units. Ich nehme an, dass das Package explizit auf diese verwiesen hat, was mein Programm ja nicht tut. Jetzt wo das auch im Lib- und Suchpfad ist, klappt alles. Danke für den Stupser!
(Da könnte Delphi wirklich etwas ausführlicher sein in seiner Fehlermeldung, grr.)

DeddyH 21. Feb 2013 13:02

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Zitat:

Zitat von Medium (Beitrag 1204549)
Delphi-Quellcode:
implementation
uses
  {$IFDEF VER150} Variants, {$ENDIF}
  {$IFDEF VER160} Variants, {$ENDIF}
  {$IFDEF VER170} Variants, {$ENDIF}
  SomeOtherUnit;
Ich habe dieses dann einfach zu dem gemacht:
Delphi-Quellcode:
implementation
uses
  {$IFDEF VER150} Variants, {$ENDIF}
  {$IFDEF VER160} Variants, {$ENDIF}
  {$IFDEF VER170} Variants, {$ENDIF}
  {$IFDEF VER180} Variants, {$ENDIF}  // <- neu
  SomeOtherUnit;

Nur als gedanklicher Ansatz zu dieser Problematik: http://forum.delphi-treff.de/showthr...396#post228396

Medium 21. Feb 2013 13:27

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Da das Kompos von einem Drittanbieter sind, will ich da nicht zu groß drin basteln. Ein einfacher Fix reicht mir an dieser Stelle. Aber die Idee die du nennst, klingt prinzipiell sinnvoll!

DeddyH 21. Feb 2013 13:33

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Fragen die tatsächlich in jeder einzelnen Unit die Delphi-Version ab? Das DRY-Prinzip gilt IMO auch für Compiler-Direktriven (meine Meinung).

Medium 21. Feb 2013 13:35

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Sehe ich sehr ähnlich. Aber es gibt halt nicht nur Leute, die durch die Bank weg Muster-Code schreiben. (Was mir teilweise schon untergekommen ist... da war das hier eine Superlapalie. Und insgesamt ist das eigentlich sogar ganz gut gemacht, halt nicht an allen Stellen.)

Sir Rufo 21. Feb 2013 18:00

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Zitat:

Zitat von Medium (Beitrag 1204583)
Es gab tatsächlich in einem der 3 Verzeichnisse mit den Quellen noch ein Unterverzeichnis mit einer Hand voll Units. Ich nehme an, dass das Package explizit auf diese verwiesen hat, was mein Programm ja nicht tut. Jetzt wo das auch im Lib- und Suchpfad ist, klappt alles. Danke für den Stupser!
(Da könnte Delphi wirklich etwas ausführlicher sein in seiner Fehlermeldung, grr.)

Darum stelle ich bei meinen Packages auch ein Verzeichnis für die DCU Dateien ein. Dieses Verzeichnis kommt in den Bibliothekspfad und der Drops ist gelutscht ... egal wo sich da überall noch Sourcen verstecken ;)

Union 21. Feb 2013 18:13

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Zitat:

Zitat von Sir Rufo (Beitrag 1204657)
Darum stelle ich bei meinen Packages auch ein Verzeichnis für die DCU Dateien ein. Dieses Verzeichnis kommt in den Bibliothekspfad und der Drops ist gelutscht ... egal wo sich da überall noch Sourcen verstecken ;)

Laut seiner Aussage waren das Fremdkomponenten... Das kann dan schnell ins Uferlose ausarten wenn man dann auch noch die Directorystrukur mit anpasst.

Sir Rufo 21. Feb 2013 20:48

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Zitat:

Zitat von Union (Beitrag 1204660)
Zitat:

Zitat von Sir Rufo (Beitrag 1204657)
Darum stelle ich bei meinen Packages auch ein Verzeichnis für die DCU Dateien ein. Dieses Verzeichnis kommt in den Bibliothekspfad und der Drops ist gelutscht ... egal wo sich da überall noch Sourcen verstecken ;)

Laut seiner Aussage waren das Fremdkomponenten... Das kann dan schnell ins Uferlose ausarten wenn man dann auch noch die Directorystrukur mit anpasst.

Die dcu Dateien in einem Verzeichnis ausgeben zu lassen ist nicht ausarten sondern sinnvoll strukturieren ;)

Ich bekomme bei den Packages von einigen immer das kalte Grausen und dann passe ich die entsprechend an, bevor ich mir in mein Programm z.B. Debug-Code reinlinke obwohl es Release sein soll ;)

Aber jeder wie er mag ...

Medium 21. Feb 2013 21:15

AW: Verwendete Unit 'foo' kann nicht kompiliert werden
 
Wenn mir das einer bezahlen würde, mache ich das gerne. Dass ich für die kleine Funktionserweiterung des bestehenden Projektes mit den Komponenten überhaupt Geld sehe ist schon gut, und ich nutze die Gelegenheit das Projekt von D7 nach D2007 zu lupfen. Wünschen würde ich mir auch saubere Codebasen bei meinen eingekauften Kompos - aber ich habe sie eben gekauft, um KEINEN Entwicklungsaufwand damit zu haben. Und da es eigentlich mein persönliches Vergnügen ist, dass ich schon auf D2007 umstelle, muss ich einfach an gewissen Stellen was wirtschaftliche Denken einschalten. Ist ja nicht so, dass mich das in der Pflege jetzt in Zukunft unsäglich nach unten ziehen wird. Irgendwo ist halt dann auch mal gut mit aufhübschen und Idealen verfolgen. Dann muss Geld verdient werden. Ergo: Der Fix reicht.


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