AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ integration in DELPHI 10

Offene Frage von "wschrabi"
Ein Thema von wschrabi · begonnen am 8. Apr 2017 · letzter Beitrag vom 10. Apr 2017
Antwort Antwort
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#1

C++ integration in DELPHI 10

  Alt 8. Apr 2017, 15:37
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
Angehängte Dateien
Dateityp: zip QMC_Delphi_calling_CPP_version2.zip (73,8 KB, 7x aufgerufen)

Geändert von wschrabi ( 9. Apr 2017 um 13:44 Uhr) Grund: besseres ZIP
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: C++ integration in DELPHI 10

  Alt 9. Apr 2017, 21:28
Ä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
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#3

AW: C++ integration in DELPHI 10

  Alt 9. Apr 2017, 22:09
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
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#4

AW: C++ integration in DELPHI 10

  Alt 9. Apr 2017, 22:23
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.

Geändert von mensch72 ( 9. Apr 2017 um 22:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: C++ integration in DELPHI 10

  Alt 9. Apr 2017, 23:27
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.
$2B or not $2B

Geändert von himitsu (10. Apr 2017 um 00:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: C++ integration in DELPHI 10

  Alt 10. Apr 2017, 00:01
[del]
$2B or not $2B
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#7

AW: C++ integration in DELPHI 10

  Alt 10. Apr 2017, 04:08
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?

Naja , für alle die es testen wollen ,anbei der code.
Angehängte Dateien
Dateityp: zip David Millington - Mixing Delphi and C++_QMC_Example.zip (540,4 KB, 8x aufgerufen)

Geändert von wschrabi (10. Apr 2017 um 05:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 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