Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi-DLL in C++ verwenden, Headerdatei? (https://www.delphipraxis.net/173738-delphi-dll-c-verwenden-headerdatei.html)

Kirillenseer 13. Mär 2013 13:47

Delphi-Version: 5

Delphi-DLL in C++ verwenden, Headerdatei?
 
Servus zusammen. An sich kann ich Delphi, aber Delphi-Interop nach C++ ist ein Problem. Dummerweise ist Google hier leidlich hilfreich. Mir geht es darum, eine Delphi-DLL in C++ zu verwenden. Und zwar nicht nur Funktionen (dafür findet man eine ganze Menge), sondern auch Datenstrukturen, um genau zu sein Records. Hat jemand einen Link zu einem ausführlichen Tutorial zu dem Thema?

Bernhard Geyer 13. Mär 2013 13:59

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Records sind doch kein Problem solange du keine Delphi-Eigenheiten/Strings verwendest und mit packed das Speicherlayout fest legst.

Der schöne Günther 13. Mär 2013 14:05

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Hallo -

Ein eigentlich ganz nettes Tutorial zum Thema DLLs und Delphi ist unter
http://www.assarbad.net/stuff/tutori...l_tutorial.pdf
zu finden. Zumindest kenne ich sonst keins, was sonst unter "ausführlich" fallen würde. :oops:

Ansonsten ist ein Delphi-Record doch die Ensprechung eines struct auf C++-Seite, da kannst du eigentlich gefahrlos Pointer hin- und herschieben. Nur schau dir vorher die Datentypen in Delphi genau an.

Oder was genau meintest du mit "Strukturen verwenden"?

Kirillenseer 13. Mär 2013 14:13

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Ich habe hier z.B. einen Header, in dem die Delphirecords auf Structs übertragen werden, in dem hinten ein void print(char *) auftaucht. Warum, weiss niemand. Irgendeinen Zweck hat es aber, sonst wäre es nicht da.

mkinzler 13. Mär 2013 14:15

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Ein Zeiger auf Char ist ein nullterminierter String in c

Kirillenseer 13. Mär 2013 14:16

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Aber was macht es? Warum ist ein Delphirecord aus zwei Bytes in C eine Struktur mit zwei Bytes und einem void print(char *)?

Der schöne Günther 13. Mär 2013 15:11

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Ich komme nicht hinterher.

Was ist das Problem? Dass (unklarerweise) irgendjemand der struct-Entsprechung auf C-Seite noch eine Methode print gegeben hat? Wie ist die Methode denn implementiert?

Außerdem: C oder C++? Wenn ich nicht vollkommen danebenliege, durfen in C doch structs noch keine Methoden haben, oder?

Kirillenseer 13. Mär 2013 15:12

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Es ist C++.

Das Problem ist: warum? Was macht es? Warum ist es da? Warum stört es nicht? Oder stört es vielleicht doch?

Implementiert ist es meines Wissens nach in der Standardbib.

Robotiker 13. Mär 2013 17:20

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Wenn in C++ eine Funktionsdeklaration in einer Struktur steht, ist es eine Klassendeklaration.

Denn
Code:
struct A
{
  void print(char *);
};
ist das gleiche wie
Code:
class A
{
public:
  void print(char *);
};
D.h. es werden implizit noch Konstruktor, Kopierkonstruktor, Destruktor, Zuweisungsoperator und in C++11 noch Movekonstruktor, usw. generiert.

C++ Klassen in DLL-Schnittstellen sind nicht binärkompatibel zwischen verschiedenen Compilern.

Zitat:

Zitat von Kirillenseer (Beitrag 1207254)
Implementiert ist es meines Wissens nach in der Standardbib.

Wie jetzt von Delphi ? In der C++ Standarblib stehen sicher keine Strukturen aus deiner Delphi DLL.

Der schöne Günther 13. Mär 2013 21:26

AW: Delphi-DLL in C++ verwenden, Headerdatei?
 
Ich fasse nochmal zusammen:
  • Eine mit Delphi 5 kompilierte DLL soll aus einem C++-Programm heraus angesprochen werden
  • Die Delphi-Funktionen liefern als Rückgabewerte Zeiger auf Delphi-Records
  • Da man von außen nicht riechen kann, wie diese Records aufgebaut sind, hat irgendein netter Mensch bereits die Delphi-Records auf C++-Strukturen abgebildet

Jetzt das Problem:
Dieser Nette Mensch hat dem C++-struct noch eine Methode void print(char*) mitgegeben. Das stiftet Verwirrung.

Hätte die Methode keine Parameter und einen Rückgabewert hätte ich angenommen, dass es eine Art .toString() ist, die einfach nur den Inhalt der Struktur ausgibt, aber so :?


Die Methode muss doch irgendwo implementiert sein. Gehört die Methode wirklich zum struct, muss sie auch irgendwo implementiert sein. Oder ist es nur eine Forward-Deklaration und hat damit nichts zu tun? Kannst du nicht ein bisschen konkreten Quelltext zeigen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 1 von 2  1 2      

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