Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Wie Typeninfo zwischen DLL's austauschen? (https://www.delphipraxis.net/193459-wie-typeninfo-zwischen-dlls-austauschen.html)

Mavarik 2. Aug 2017 15:51

Wie Typeninfo zwischen DLL's austauschen?
 
Hallo Zusammen!

Ich möchte mit einer Klasse in zwei verschiedenen DLL's arbeiten.
Leider bin ich darauf angewiesen, dass ich über die RTTI-TypeInfos darauf zugreife...

Gibt es eine Möglichkeit diese Informationen von einer DLL in die andere zu übertragen oder zu sharen?

Vielleicht über den ShareMemoryManager?

Mavarik

TiGü 2. Aug 2017 16:08

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Bissel dünne die Info?!
Worum geht es genau? Möchtest du eine Instanz des Objekts aus der Anwendung heraus an zwei verschiedene DLLs übergeben und dort bearbeiten?
Klassisch, sicher und sprachübergreifend per (COM-)Interface ist dir nichts?

Bernhard Geyer 2. Aug 2017 16:22

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Du musst mit Laufzeitpackages compilieren damit du Klasse in mehreren DLLs verwenden kannst.
Dann bist du halt auf die gleiche C++Builder/Delphi-Version mit der DLL festgelegt.

Ansonsten (COM-)Interfaces.

Mavarik 2. Aug 2017 16:32

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1377944)
Du musst mit Laufzeitpackages compilieren damit du Klasse in mehreren DLLs verwenden kannst.

ok, Laufzeitpackages habe ich noch nie verwendet...

Zitat:

Zitat von TiGü (Beitrag 1377939)
Bissel dünne die Info?!

OK!

Folgende Situation:

Hauptprogramm ist D2007
DLL1 ist 10.0
DLL2 ist 10.2

DLL2 Erzeugt ein Interface als IInterface;
Hauptprogramm übergibt das Interface an DLL1.
DLL1 füllt die Member...
Hauptprogramm übergibt das Interface zurück an DLL2;

Das ist alles klein Problem....

Aber leider muss DLL1 per RTTI sich einen Setter holen und der hat im Kontext von DLL1 einen anderen Typen im Kontext von DLL2...

Mavarik

himitsu 2. Aug 2017 16:33

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Man könnte in der Klassendefinition rumfuschen, wenn man die Klasse zwischen der EXE/DLL übergibt,
aber da müssen auf beiden Seiten die Klassen "identisch" sein, was garnicht so leicht ist und noch schwerer bis hin zu unmöglich wird, wenn unterschiedliche Compilerversionen genutzt würden.


Eine Klasseninstanz ist nur ein Speicher, mit einem Link zur Klassendefinition, damit das Programm weiß, wie es mit dem Speicher umzugehen hat.
Man könnte also die verlinkte Klasse durch die Klasse der DLL ersetzten, wenn die Klasse gleich in der DLL weiterverarbeitet wird.



Problem ist auch, dass TypeInfos auch noch vererbt und verschachtelt sind und es oft nicht genügt nur den Haupttyp zu tauschen
und dann müssten auch komplett alle Methoden der Klasse virtuell sein.

Uwe Raabe 2. Aug 2017 17:04

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Zitat:

Zitat von Mavarik (Beitrag 1377945)
ok, Laufzeitpackages habe ich noch nie verwendet...

...

Hauptprogramm ist D2007
DLL1 ist 10.0
DLL2 ist 10.2

Damit das mit den Laufzeitpackages funktioniert, müssen alle Beteiligten mit derselben Delphi-Version compiliert werden. Es bringt überhaupt nichts, wenn jeder seine eigenen Laufzeitpackages mitbringt.

jaenicke 3. Aug 2017 05:38

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Zitat:

Zitat von Mavarik (Beitrag 1377945)
Aber leider muss DLL1 per RTTI sich einen Setter holen und der hat im Kontext von DLL1 einen anderen Typen im Kontext von DLL2...

Das ist schon etwas böse. Aber ich gehe bei dir einfach mal davon aus, dass du das nicht "aus Spaß" so machst. ;-)

Wir haben ähnliche Konstellationen wie du, aber dabei casten wir die Interfaces immer auf die korrekten Typen nach der Übergabe als IInterface, nutzen also nicht wie du die RTTI für die Member. (Der Pluginmanager hat dafür eine generische Schnittstelle in beide Richtungen.)

Mir fallen drei Möglichkeiten ein, falls du beide DLLs dafür ändern kannst:
1. Wäre es vielleicht möglich TInvokeableVariantType zu verwenden? Zum Beispiel indem DLL2 zusätzlich ein weiteres Interface implementiert, das einen passenden Variant enthält, so dass du das Interface per QueryInterface dafür holen kannst? (Das habe ich zwar noch nie über DLL Grenzen hinaus gemacht, aber ich vermute, dass das klappt.)
Das wäre bei der Verwendung in DLL1 dann supereinfach.
2. Vielleicht könnte DLL2 in der Klasse auch ein weiteres Interface implementieren, das die notwendigen RTTI-Infos exponiert.
3. Gibt es irgendeine Möglichkeit an den Schnittstellen etwas zu erweitern? Ich denke da an eine zusätzliche Möglichkeit Metainformationen zu den Interfaces abzufragen.

Mavarik 3. Aug 2017 10:36

AW: Wie Typeninfo zwischen DLL's austauschen?
 
Danke für die Infos...

Ich denke ich muss die Routinen von DLL1 nach DLL2 verschieben...

Wird dem Kunden nicht gefallen... Ist dann aber so...

Mavarik


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