![]() |
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?
|
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.
|
AW: Delphi-DLL in C++ verwenden, Headerdatei?
Hallo -
Ein eigentlich ganz nettes Tutorial zum Thema DLLs und Delphi ist unter ![]() 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"? |
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.
|
AW: Delphi-DLL in C++ verwenden, Headerdatei?
Ein Zeiger auf Char ist ein nullterminierter String in c
|
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 *)?
|
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? |
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. |
AW: Delphi-DLL in C++ verwenden, Headerdatei?
Wenn in C++ eine Funktionsdeklaration in einer Struktur steht, ist es eine Klassendeklaration.
Denn
Code:
ist das gleiche wie
struct A
{ void print(char *); };
Code:
D.h. es werden implizit noch Konstruktor, Kopierkonstruktor, Destruktor, Zuweisungsoperator und in C++11 noch Movekonstruktor, usw. generiert.
class A
{ public: void print(char *); }; C++ Klassen in DLL-Schnittstellen sind nicht binärkompatibel zwischen verschiedenen Compilern. Zitat:
|
AW: Delphi-DLL in C++ verwenden, Headerdatei?
Ich fasse nochmal zusammen:
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 20:59 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