Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Dürfen Packages für D und BCB gleiche Namen haben?

  Alt 13. Jan 2010, 14:25
Wenn du nun ein BDS2006 oder späteres Produkt nutzt, dann brauchst du nur ein Package. Aber nun zu Details:

1. nur Delphi Komponenten für Delphi & C++Builder

Umgebung: BDS/RAD Studio (keine einzelne Personality!)
Packages: C++Builder Packages anlegen (nicht die Delphi Packages!)

Wenn es nur Delphi Komponenten sind, dann diese in ein Packagesystem einbinden (DTL und RTL) und bei den Optionen einstellen, daß die *.bpi, *.lib und *.hpp mit erzeugt werden. Dann das DTL Package einfach registrieren (die Laage muss wie auch die RTL Packages im Suchpfad liegen, damit die IDE diese laden kann) und fertig.

Bei C++ Projekten dann wenn die Komponenten verwendet werden entweder die *.LIB direkt vom Explorer in den Projektmanager ziehen. Danach entfernen wir die Pfadangaben in dem Projektfile und setzen den LIB Suchpfad des Projektes zusätzlich zu dem Ort mit der .LIB Datei des Packages (RTL).

2. nur C++ Komponenten für C++Builder

Umgebung: BDS/RAD Studio oder C++Builder Personality
Packages: Delphi Packages anlegen

Da die C++ Komponenten nicht unter Delphi verwendet werden können ist hier die Vorgehensweise die allgemein übliche. Einfach beide C++Packages erzeugen, installieren und gut ist. Hinweis zum Suchpfad wie zuvor gilt hier auch für die BPL

3. nur Delphi Komponenten für Delphi

Umgebung: BDS/RAD Studio oder Delphi Personality
Packages: Delphi Packages anlegen

Auch hier alles wie gehabt, gleiches zu den Suchpfaden.

4. Allgemeines

Suchpfad sollte möglichst vorher entsprechend erweitert werden, wenn man nicht den von CodeGear vorgeschlagenen BPL Pfad verwenden will. Unbedingt bei allen Packages Aktionen darauf achten, dass die IDE nicht irgendwelche Pfade in den IDE weiten Library Suchpfad einträgt. Diesen schwachsinnigen Code haben sie in der aktuellen IDE immernoch so drin.

Namen von Packages dürfen nicht doppelt vergeben werden. Von daher auch die RTL und DTL Packages kennzeichnen. Unterschiedliche Versionen von Delphi/C++Builder haben auch unterschiedliche Compileroptionen, also lieber auch noch für die jeweilige Version ein Packages anlegen.

Die Beschreibungen der Packages dürfen nicht mit einem _ anfangen, ansonsten werden sie von der IDE nicht angezeigt. Das ist ein weiterer Schwachmatismus von CodeGear.

Wenn Delphi Quellen (z.B. Komponenten) unter dem C++Builder genutzt werden oder anderweitig Code gemischt wird, muss man explizit in den Delphi Units welche die Enum Größe festlegt einen entsprechenden Compilerschalter einfügen, damit diese gleich groß sind. Der Delphi Compiler macht diese immer nur so groß wie er sie zur Darstellung aller Elemente benötigt (d.h. in den meisten Fällen ein Byte). Die entsprechende Delphi Compiler Option in den Projektoptionen wird in solchen C++Builder Packages beim Delphi Compiler Aufruf nicht weitergereicht. D.h. die Einstellung ist komplett wirkungslos (von BDS2006 (keine Option in der IDE) bis RAD2007 (Option vorhanden, nicht weitergereicht) als Bug vorhanden; RAD2009 ungetestet) und führt dadurch beim Memberzugriff von C++ zum überschreiben von anderen Daten.

Der Datentyp Comp, UInt64 sowie Nutzung die von virtuellen abstrakten statischen Methoden sind nicht C++Builder kompatibel. Erstere beide klappen dank des HPP Generators nicht (bis mindestens einschliesslich RAD2007) und letzteres bietet der C++ Sprachumfang nicht an. Letzteres ist durch eine virtuelle statische Methode ersetzbar, welche eine EAbstractError Exception wirft. UInt64 wird durch den HPP Generator immer als Int64 übersetzt was dann beim linken eine unresolved external reference bringt, da der Linker nur eine Methode mit UInt64 Signatur findet.

Konstanten innerhalb von Klassen bekommen z.T. andere Datentypen oder auch Werte durch den HPP Generator/C++Builder Linker und Typdeklarationen (Enumerations, Klassen, etc) sind auch nicht nutzbar, da entweder der HPP Generator daraus Müll macht oder C++ keine Entsprechung dazu bietet.

Wenn man vom C++Builder bzw. einer C++ Anwendung in eine Delphi Klasse debuggen will so klappt dies nur wenn die Flags "DebugInLib" bzw. "DebugInEXE" in den Projektfiles eingetragen sind und aktiviert sind. Beim BDS2006 gab es zu diesen Optionen bisher keinen entsprechenden Schalter in der IDE und die Optionen wurden standardmäßig nicht eingefügt oder aktiviert. Wenn man aber ein altes Package aktualisiert hatte, wurde die Option eingetragen. Ab RAD2007 gibt es dazu eine Entsprechung in der IDE bei den Optionen, aber das Flag wird trotzdem meist nicht richtig gesetzt und z.T. durch reines Öffnen einer LIB bzw. eines Packages wieder zurück gesetzt oder einfach ganz entfernt. Ohne dieses Flag erhält man keine Codepunkte in den Pascal Quellen und somit keine Debugging Möglichkeit. Auch Symbole und Variablen sind nicht verfügbar. Beim Debuggen mit dem C++Builder in Delphi Quellen immer beachten, dass Evaluierungen immer nach C(++) Standard erfolgen. Also this und nicht Self und * anstatt ^, etc.

Das sind nur mal ein paar kleine Dinge dazu. Ich hoffe damit kannst du deine Packages integrieren. Weitere Fehler und Unzulänglichkeiten (zumindest bis RAD2007 verfolgt) findet man auch hier.
  Mit Zitat antworten Zitat