![]() |
Delphi / C++ mischen
Hallo zusammen,
zur CodeRage XI gab es einen ![]() Ich habe das Beispiel zum Laufen gebracht (Delphi/C++-Builder 11) und bin sogar noch einen Schritt weiter gegangen und habe eine externe Bibliothek (protobuf) kompiliert & gelinkt bekommen. Was etwas lässtig ist, ist das man zu jeder Klasse die man in beiden Sprachen verwenden möchte, jeweils eine Abstrakte Klasse erstellen muss und dazu noch eine Create-Funktion. Hat damit jemand Erfahrung? Ist diese Vorgehensweise in dem Video die aktuell beste/optimalste Möglichkeit oder gibt es mittlerweile bessere wege? Gruß pustekuchen |
AW: Delphi / C++ mischen
Andersrum geht es super.
Du kannst Delphi-DCUs im C++Builder nutzen, also Delphi in dein C++ rein mischen. Ins Delphi kann man leider kein C++ rein bekommen. Aber man kann vorkompilierten Code einbinden, z.B. als OBJ-Datei. Damit Delphi damit aber was anfangen kann, muß man ihm die Funktions-Sugnaturen geben, als Delphi/Pascal. z.B. siehe ZLib/Zip, JPEG, PNG, RegEx usw., was auf diese Weise alles ins Delphi reinkommt. Es muß auch kein C++ sein, sondern kann auch aus anderen Sprachen kompiliert wurden sein. |
AW: Delphi / C++ mischen
Moin,
mitlerweile läuft meine Anwendung die Delphi/C++ mixed. Ich stand nun jedoch vor einem Problem: Dynamischer Speicher z. B. TBytes In C++ wurde mein Delphi Interface wie folgt definiert: (
Delphi-Quellcode:
entspricht in Delphi
System::DynamicArray<System::Byte>
Delphi-Quellcode:
)
TBytes
Code:
Die getData Funktion wird aus C++ heraus aufgerufen.
class PASCALIMPLEMENTATION TMyAbstractService : public System::TObject
{ typedef System::TObject inherited; public: virtual System::DynamicArray<System::Byte> __fastcall getData() = 0 ; public: /* TObject.Create */ inline __fastcall TMyAbstractService() : System::TObject() { } /* TObject.Destroy */ inline __fastcall virtual ~TMyAbstractService() { } };
Code:
Die Delphi Funktion sieht dann so aus:
TBytes data= (*m_service)->getData();
Delphi-Quellcode:
Es kommt zu einer doppelten Freigabe des Speichers (FastMM4 machte darauf aufmerksam). Umgehen konnte ich das Problem, indem ich selbst Speicher auf dem Heap reserviere und manuell wieder freigebe.
function TMyAbstractService.getData(): TBytes;
begin SetLength(Result, 100000000); Result[0] := 1; end; Laut ![]() Vielleicht hat ja jemand von euch eine Idee dazu. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz