AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi-DLL in C++ verwenden, Headerdatei?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-DLL in C++ verwenden, Headerdatei?

Ein Thema von Kirillenseer · begonnen am 13. Mär 2013 · letzter Beitrag vom 14. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
Kirillenseer

Registriert seit: 13. Mär 2013
5 Beiträge
 
#1

Delphi-DLL in C++ verwenden, Headerdatei?

  Alt 13. Mär 2013, 13:47
Delphi-Version: 5
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 13. Mär 2013, 13:59
Records sind doch kein Problem solange du keine Delphi-Eigenheiten/Strings verwendest und mit packed das Speicherlayout fest legst.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 13. Mär 2013, 14:05
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.

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"?
  Mit Zitat antworten Zitat
Kirillenseer

Registriert seit: 13. Mär 2013
5 Beiträge
 
#4

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

  Alt 13. Mär 2013, 14:13
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 13. Mär 2013, 14:15
Ein Zeiger auf Char ist ein nullterminierter String in c
Markus Kinzler
  Mit Zitat antworten Zitat
Kirillenseer

Registriert seit: 13. Mär 2013
5 Beiträge
 
#6

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

  Alt 13. Mär 2013, 14:16
Aber was macht es? Warum ist ein Delphirecord aus zwei Bytes in C eine Struktur mit zwei Bytes und einem void print(char *)?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

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

  Alt 13. Mär 2013, 15:11
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?
  Mit Zitat antworten Zitat
Kirillenseer

Registriert seit: 13. Mär 2013
5 Beiträge
 
#8

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

  Alt 13. Mär 2013, 15:12
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.
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#9

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

  Alt 13. Mär 2013, 17:20
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.

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.

Geändert von Robotiker (13. Mär 2013 um 17:45 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

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

  Alt 13. Mär 2013, 21:26
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:37 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