![]() |
Daten von C nach PAS und PAS nach C ...
Hallo,
ich bin noch in der Überlegungsphase, wie man am besten Daten von Delphi nach GNU C austauscht und wieder zurück... Wie wir ja alle wissen, ist es ja nicht so einfach, Delphi Klassen in C++ zu verwenden. Mein Ansatz wäre: - innerhalb einer C++ DLL eine Funktion schaffen, die, wenn in Delphi foo := TFoo.Create; erreicht wird: in C++ extern "C" void* set_new_class("foo") { ... } zu schreiben, wobei dann der C Funktions-Parameter "foo", in eine C++ std::map gespeichert wird, um so zum einen den Namen der Referenz sowie den Referenz-Pointer zu speicher - mit einer weiteren C Funktion: void* get_class_ptr("foo") { ... } den Pointer holen um dann auf Objekte der Klasse zuzugreifen. Aber wie kann man das erreichen, wenn man keine Interfaces oder COM+ nutzen möchte ? Muss da ein Anwendungs-Server und ein auf dem Server abgestimmter Client herhalten ? wie könnte man das lösen ? |
AW: Daten von C nach PAS und PAS nach C ...
Moin moin!
Wenn wir Daten von einer Programmiersprache in eine andere schieben wollen, gehen wir über Json. Geht das bei C++ nicht auch? Bei Delphi geht das recht easy. Du musst dann nur die Datenstruktur, also die Klassen passend anlegen. ... Nur falls du einfach auf den offensichtlichen, einfachen Weg nciht gekommen bist, so wie mir das ständig geht. ;-) Liebe Grüße Incocnito |
AW: Daten von C nach PAS und PAS nach C ...
ja stümmt, ich dummerjen.
brauch ich aber trotzdem eine Einsprungsadresse aus der DLL, die ich mit GetProcAddr holen könnte. Danke für den Tipp |
AW: Daten von C nach PAS und PAS nach C ...
* innerhalb eines Prozesses? (EXE und DLLs)
* innerhalb des Systems? (zwischen Anwendungen, bzw. beim OLE ein OutOfProzess-Server ... z.B. fremde EXE oder DLL in der dllhost.exe) * zu einem anderem System (VM, Intranet oder sonstwo im Internet) IPC Records/Structs ... |
AW: Daten von C nach PAS und PAS nach C ...
Ich habe (unter anderem) darüber auf den letzten Forentagen einen
![]() |
AW: Daten von C nach PAS und PAS nach C ...
ah mich deuchtet was ...
der Thomas hat im Quellcode GetProcAddr Pointer verwendet. jetzt fällt mir gerade ein, das ja der Constructor - egal welche Sprache, ja eine Objekt-Referenz zurückliefert, die dann durchgereicht werden kann... nicht schlecht sprach Herr Specht. Danke |
AW: Daten von C nach PAS und PAS nach C ...
Nein, egal ob zu C++ oder sonstwas ... Klassen-Instanzen zu übergeben macht man einfach nicht.
Bei Packages wird die TypeInfo/Klassendeklaration und die Prozeduren gemeinsam genutzt. Bei DLL besitzt JEDER seine eigene Kopie und die kann sich beim Kompilieren minimal/extremst unterscheiden, selbst wenn auf beiden Seiten das gleiche Delphi zum Einsatz kam. Nicht nur die getrennten TypeInfo/RTTI ... ohne ein Shared-Memory geht sowieso nix. Selbst mit viel einfacheren Strukturen gab es hier ganz böse Probleme. ![]() |
AW: Daten von C nach PAS und PAS nach C ...
und wenn man nur die Funktionnamen zu einer importierten Funktion weiterleitet,
und dann intern die Pointer handhabt ... ? hmmm, doppelt nachgedacht, macht das Sinn... |
AW: Daten von C nach PAS und PAS nach C ...
Keine Chance, echt Objekte (außer jetzt die serialisierte Form, wie bei Json) rüber zu reichen ist nicht zu empfehlen.
Ja, es kann sein, dass es klappt, aber liegt beim Kunden die alte DLL, die Exe wurde aber mit einem anderen Compilerflag compiliert und er nutzt die neue EXE bekommt er lustig Fehlermeldungen und Speicherfehler, die keiner vernünftig lokalisieren kann. Lass dich nicht zu verleiten, das so zu tun, nur weil es bei dir beim ersten Test klappt (oder weil du heute sagst "DLL und EXE werden immer zusammen ausgeliefert"). Das wird dich in falscher Sicherheit wiegen! |
AW: Daten von C nach PAS und PAS nach C ...
Wenn, dann maximal als Pointer und im C wirklich nichts damit machen, außer durchreichen (auf delphiseite ein Cast ... Cast, nicht Pointer auf Variable)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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