Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   C++ integration in DELPHI 10 (https://www.delphipraxis.net/192324-c-integration-delphi-10-a.html)

wschrabi 8. Apr 2017 14:37


C++ integration in DELPHI 10
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Habe eben mir die Tutorials von Embarcadero zur C++ Integration in Delphi angesehen. https://community.embarcadero.com/bl...g-delphi-and-c

KOnnte auch schon eine C++ Routine einbauen, doch leider klappt es einfach nicht,
wenn ich von Delphi ein integer Array (zb 1024 integers von 0 und 1) an die C++ routine übergeben will.
Auch meckert er wenn ich eine 2. TEXT Property von C++ an Delphi (so wie im Tutorial) zurückgeben will.

Kann mir jemand da die Analogen Tips geben wie man so was mit Properties erweitert?

Nochwas: Ich habe jetzt beim QMC Verfahren random Min-Terme für die Berechnung verwendet. Doch läuft das Prg bei mehrmaligen Anklicken der Berechnung nicht zuverlässig durch. AUch Im Debugger läuft es das erstemal und dann nach Beendigung komme ein PRg Crash. Am QMC Teil kann es nicht liegen, denn das ist abgekupfter und ohne Delphi -> Cpp INtegration ist das Problem nicht da.

Kann mir da jemande helfen? Ich finde den bug nicht.
Hier das ZIP

Besten DANK.

PS: Hab das ZIP besser an das Tutorial angepasst.

Walter
:cyclops:

mensch72 9. Apr 2017 20:28

AW: C++ integration in DELPHI 10
 
Ähm... ich verstehe wieder im schnellen Überblick weder dein Problem(in welcher Datei in welcher Zeile), noch den Grund für diesen Ansatz der Mischung aus CPP & Delphi... und mir fehlt Zeit&Lust alle Dateien deines ZIP zeilenweise zu analysieren.

Für mich etwas seltsam dein Weg über ein (separates) Cpp Package zu gehen... wenn es so sein soll bin ich raus, da habe ich keinerlei Erfahrung und sehe keinen Eigenbedarf.
Denn ich gehe mal davon aus, du hast RAD-Studio, also Delphi+CPPbuilder... ich programmiere seit Ewigkeiten LowLevelAPIs viel in C++Builder und binde dort dann einfach in die CPP-Projekte meine PAS Dateien für DB,GUI,... in ein Gesamtprojekt hinein, bzw. gehe den Weg über rein C kompatible DLLs, welche Delphi dann aufruft.

Meine Erfahrung:
-> CppBuilder kann und mag von Haus aus "Delphi"(PAS in C ist also OK und gewollt), weil ja die RTL,VCL und die ganzen Komponenten auch in PAS geschrieben sind und sich völlig problemlos debuggen lassen:)
-> Delphi mag eigentlich kein C++(CPP in Delphi also eher ungewollt), und wenn dann "C pur" in Delphi, also lieber reine C-Funktionen nur mit BasisTypen und PackedRecords, alle Strings nur als PChar, keine dynamischen Arrays(wenn diese nur readonly über @Item[0] plus Anzahl) und keinerlei Objekte
-> bei DLLs kann man für etwas einfacheres Arbeiten beiseitig eigene ÜbergabeRecordTypen mit logischen Propertys samt sprachspezifischen Read&Write haben(getrennt so sogar den Zugriff per ObjektTypen implementieren, aber eben KEINE direkte Übergabe oder Speicherung von Klassen/Objekten).
Seit Delphi2007 funktioniert das mit dem "record", fast 100% 1:1 wie mit dem "struct" in CPP. Der Speicher und ein Pointer darauf ist wirklich nur für die Daten statisch belegt, es ist keine Kombi aus Methoden+Datenpointer wie bei den Klassen in Delphi.


Schreibe wenn du magst aber bitte trotzdem mal gezielt wo was dein Problem ist, denn eine IntegerArrayVariable welche man als Pointer oder Referenz per "var"/"&" zur Übergabe deglariert ist möglich, auch wenn es seltsamt ist für 1000x 0/1 ein so IntegerArray zu nutzen. Ich würde wohl einen RecordTyp mit einem internen ByteArray[125] und einer Value[x]:Boolean Property mit read&write Impelmentierung zum Setzen/Lesen des betreffenden "Bits" im Array machen. Es gibt zwar BitArray als Typ in neuen Delphi, aber 100% sicher und kompatibel bis zu Standard-C kann man das hier jeweils per simplen Einzeiler selbst implementieren.

Die ungefähre Richtung, wie ich dein "Problem" angehen würde, kannst du nun zumindest erahnen;)

wschrabi 9. Apr 2017 21:09

AW: C++ integration in DELPHI 10
 
Vielen DANK für deine umfangreiche Antwort.
Zitat:

Für mich etwas seltsam dein Weg über ein (separates) Cpp Package zu gehen...
den QMC Algorithmus habe ich vom Netz nur in C vorliegen.

Zur Einbindung von C++ in Delphi: Siehe hier den Link mit dem Video.
https://community.embarcadero.com/bl...g-delphi-and-c

Habs jetzt auch noch mit einer normalen DLL (in C) versucht die ich in Delphi einbinde.
Doch da klappt was noch nicht mit der String-Rück_Übergabe. BIn noch am Knobeln, wäre schön wenn Du mir einen Tip dazu auch geben könntest. http://www.delphipraxis.net/180689-d...ml#post1366924

Den Vorteil mit 1) wo es ein bpl ist, wäre man könnte da leicht eine Komponente erstellen, die dann
für zukünfiges Programmieren bereitgestellt werden könnte, und so einfach den QMC Algo verwenden läßt.
Stimmst Du mir da überein?

Danke für Deine RAT.
Walter

mensch72 9. Apr 2017 21:23

AW: C++ integration in DELPHI 10
 
wenn es C ist, lass es so und mache eine DLL.

Zu deinem Stringproblem habe ich auch schon was geschrieben... vereinfacht: du kannst PAnsiChar auf Delphi-ShortStrings in C als (Pointer)ArryOfBytes mit Länge in [0] und Zeichen ab [1..] sowie im voraus fixem Speicherbereich, also einfach Länge 1..255 verstehen. All das gilt so vereinfacht aber nur für NonUnicode.

Ansonsten ist ein PAnsiChar auf einen C-String in Delphi ein PArrayOfByte ohne direkt bekannte Länge, da hier das erste NULL-Zeichen die das Ende und damit die Länge definiert. Auch das gilt so vereinfach nur für NonUniCode.

himitsu 9. Apr 2017 22:27

AW: C++ integration in DELPHI 10
 
Man kann auch in C++ oder anderen Sprachen eine .obj erzeugen, diese in eine PAS einbinden und direkt in die EXE einkompilieren (linken).

siehe zlib und regex



Ich versteh den ganzen Aufwand auch nicht.
Wäre es nicht einfacher das Ganze als "Interface" zu implementieren und statt dieser abstrakten klasse dann ein COM-Interface zu nutzen?

Klar, es wäre natürlich cool, wenn man in Delphi ebenso einfach eine "C-Unit" einbinden könnte, so wie es mit Delphi im C++Builder möglich ist.

himitsu 9. Apr 2017 23:01

AW: C++ integration in DELPHI 10
 
[del]

wschrabi 10. Apr 2017 03:08

AW: C++ integration in DELPHI 10
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, jetzt hab ich es mal wie im Tutorial hinbekommen - zwar via BPL , aber DLL kommt noch.
Die Ursache war:
ich hatte System::Unicodestring drin stehen, und die Routine gibt ja einen ANSI String zurück.
und das hat im nicht gepasst. Ging zwar 1 oder 2 mal dann hängte sich es auf.

Solution:
Wenn ich System::Ansistring überall schreibe klappt es.

Frage nur warum? :cyclops:

Naja , für alle die es testen wollen ,anbei der code.


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