Komponenten aus C++ in Delphi



  • Moin,

    also mein Problem ist, dass ich mindestens eine Komponente die ich unter Borland C++ (BCB6, BDS06 und RAD09 funktionieren gleich) entwickelt habe für einen Kunden zur Verfügung stellen soll. Dieser hat aber Delphi 5 für das Hostprogramm. Quellenweitergabe ist nicht drin.
    Nun hatte ich einfach mal versucht unter Delphi 7 (niedrigste Delphi Version bei uns im Haus) die BPL zu installieren. Unerlaubterspeicherzugriff war die Folge. Und scheinbar ist es eh eine schlechte Idee, Packages zu verwenden. Daher dachte ich, es wäre am sinnvollsten sie als compilierte Biblothek anzuhändigen. Bei Delphi wäre es ja DCU. Doch leider kann ich aus dem BCB heraus keine DCU erstellen.
    Hat jemand da Erfahrung mit, denn der umgekehrte Weg von Delphi nach C++ ist ja leicht.

    Gruß
    Jay



  • Du kannst C++-Code in Delphi über dynamische Bindung verwenden, nicht aber in C++ geschriebene Komponenten zur Entwurfszeit. Das liegt u.a. daran, daß der Delphi-Compiler die Komponenten gerne aus einem Unit (-> DCU = Delphi Compiled Unit) importieren würde, welches BCC aber nicht erstellen kann. (Über die Hintergründe hatte ich hier einmal etwas geschrieben.)

    Du hast demnach die folgenden Optionen:
    - Portieren der Komponente nach Delphi. Falls du nicht von viel Fremdbibliotheken abhängig bist und der Codeumfang nicht allzu groß ist, könnte das eine Option sein.
    - Bereitstellen der Komponente als ActiveX-Steuerelement. C++Builder bietet da einigen Komfort für das Generieren eines Komponentenwrappers, aber ActiveX ist so eine Sache für sich.
    - Falls es sich nicht um eine visuelle oder sonstig zur Entwurfszeit in Erscheinung tretende Komponente handelt, könntest du ein C- oder COM-Interface dafür erstellen.
    - Mit etwas Trickserei kannst du auch C++-Komponenten in Delphi verwenden; allerdings muß die Komponente in C++-Code instantiiert werden, und sie muß von einer abstrakten Basiskomponente ableiten, die all die Operationen zur Verfügung stellt, die von Delphi aus benötigt werden. Weiter setzt das voraus, daß die Komponente mit der zur verwendeten Delphi-Version gehörigen Version von C++Builder, in diesem Falle also C++Builder 5, übersetzt wird.


Anmelden zum Antworten