Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Interface von Delphi -> C++? (https://www.delphipraxis.net/173888-interface-von-delphi-c.html)

Memnarch 22. Mär 2013 11:14

Interface von Delphi -> C++?
 
Tag allerseits,
mich würde interressieren ob man ein Interface aus delphi an ein in C++(nicht Builder) geschriebenes programm zur nutzung weitergeben kann?

Sir Rufo 22. Mär 2013 11:19

AW: Interface von Delphi -> C++?
 
Zitat:

Zitat von Memnarch (Beitrag 1208401)
Tag allerseits,
mich würde interressieren ob man ein Interface aus delphi an ein in C++(nicht Builder) geschriebenes programm zur nutzung weitergeben kann?

Ja, wenn die ganzen Aufrufkonventionen stimmen :)

Bernhard Geyer 22. Mär 2013 12:00

AW: Interface von Delphi -> C++?
 
Wenn es auf COM-Style ist ja.
Lies dir mal das durch: http://rvelthuis.de/articles/articles-cppobjs.html

Memnarch 22. Mär 2013 12:12

AW: Interface von Delphi -> C++?
 
@Bernhard Geyer:
Jain, das ist von C++ nach Delphi. Wenn es andersrum keinen unterschied macht. Auf diesen Artikel war ich vor wenigen Tagen schonmal gestoßen. War mir aber unsicher ob das auch andersrum geht.

@Sir Rufo
Wenn ich also prinzipiel überall stdcall hinter/vorklatsche würde es passen?

Bernhard Geyer 22. Mär 2013 12:29

AW: Interface von Delphi -> C++?
 
Zitat:

Zitat von Memnarch (Beitrag 1208414)
@Bernhard Geyer:
Jain, das ist von C++ nach Delphi. Wenn es andersrum keinen unterschied macht. Auf diesen Artikel war ich vor wenigen Tagen schonmal gestoßen. War mir aber unsicher ob das auch andersrum geht.

Es müsste auch anders herum gehen.

AFAIK ist das Problem das im C++Standard nicht genau festgelegt ist wie die Methodentabelle genau aufgebaut ist (Basisadresse und Co.). MS hat diese Problem im COM-Standard mit genauen regeln gelöst so das Interfaces Sprachübergreifend funktionieren.

Memnarch 22. Mär 2013 12:47

AW: Interface von Delphi -> C++?
 
ah ok. Gut zu wissen. Also kann ich somit für ein DelphiHauptprogramm Interfaces erstellen, die mir ein Pluginsystem ermöglichen, welche auch Plugins aus C++ erlauben^^

geskill 22. Mär 2013 15:40

AW: Interface von Delphi -> C++?
 
Ich würde die Interfaces aber nicht nur für C++ verfügbar machen, sondern allgemeiner für COM, wie es hier auch schon andere gesagt haben.

Hier gibt es eine schöne Tabelle dazu: http://www.dynamsoft.com/help/TWAIN/...ataMapping.htm


Denn im oben genannten Thema ist das z.B. schon mit dem einfach Booleschen Datentypen problematisch (bool<->Boolean).

Delphi:
Zitat:

Eine Boolean-Variable belegt ebenso wie eine ByteBool-Variable ein Byte Speicherplatz. Eine WordBool-Variable belegt 2 (ein Word) und eine LongBool-Variable 4 Byte (zwei Word).
von Boolesche Typen

C++:
Zitat:

In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4, while in Visual C++ 5.0 and later, the same call yields 1.
von bool (C++)

D.h. in C++ war ein Bool mal mit 4 Bytes definiert. Aber von C++ gibt es ja nicht nur das C++ aus Visual Studio, sondern auch einige freie Compiler. Dort kann der Datentyp noch ganz anders definiert sein. Sowas endet dann früher oder später im Chaos ;)

Für die größte Kompatibilität immer COM nehmen und das heißt in diesem super simplen Beispiel WordBool nehmen :)


Der Nachteil an COM ist die Geschwindigkeit (reference counting), aber bei der heutigen Leistung eines PC spielt das keine Rolle mehr ;)

Elvis 23. Mär 2013 09:00

AW: Interface von Delphi -> C++?
 
Zitat:

Zitat von Memnarch (Beitrag 1208414)
Wenn ich also prinzipiel überall stdcall hinter/vorklatsche würde es passen?

Besser wäre safecall.
Damit lassen sich Exceptions einfacher zwischen den Systemen austauschen.
MSDN-Library durchsuchenIErrorInfo
MSDN-Library durchsuchenSetErrorInfo


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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