Objekt über DLL-Interface übergeben - ist das portabel?



  • Hi,

    ich habe hier ein Problem, das ich mangels zweitem Compiler nicht selbst überprüfen kann.

    Ich habe eine Hauptapplikation, welche verschiedene Klassen definiert und entsprechende Objekte erzeugt.

    Diese Hauptapplikation kann per Plug-In Mechanismus (der aus nichts weiter als aus dynamisch dazugeladenen DLLs besteht) externen Code einbinden. Für die Erzeugung der DLLs selber besteht auch Zugriff auf die Headerfiles der Klassen der Hauptapplikation.

    Die DLL kann auf diese Art z.B. ein Objekt einer Klasse erzeugen und dieses Objekt bei einem speziellen DLL-Funktionsaufruf an die Hauptapplikation zurückliefern. Die Hauptapplikation soll dann Zugriff auf die Daten dieses Objektes haben und das Objekt eventuell sogar wieder entfernen können. Das funktioniert hier momentan problemlos. Allerdings benutze ich sowohl für die Hauptapplikation als auch für die DLLs exakt den gleichen Compiler.

    Meine Frage jetzt:

    Klappt das auch noch, wenn jemand eine solche DLL mit irgend einem anderen Compiler erzeugt? Oder fliegt mir dann die gesamte Konstruktion um die Ohren weil die Compiler die Strukturen in den Klassen im Speicher möglicherweise anders anordnen?



  • Elmey schrieb:

    Objekt über DLL-Interface übergeben - ist das portabel?

    Jein.

    C++ hat keine Binärkompatibilität. Es geht wohl mit rein virtuellen Basisklassen, und einigen anderen Einschränkungen, aber meine Versuche mit entsprechenden Beschreibungen waren nicht vollständig lauffähig (mag aber auch an einem sehr speziellen Compiler liegen, den ich in meiner Konstellation hatte). Andere sagen das unproblematisch ist (mit den Einschränkungen).

    Portabel im Sinne von Plattformunabhängigkeit existiert wiederum definitiv nicht (DLLs sind Windowsspezifisch, es gibt aber vergleichbares in anderen Betriebssystemen).



  • asc schrieb:

    Portabel im Sinne von Plattformunabhängigkeit existiert wiederum definitiv nicht

    Nein, darum geht es auch nicht, es geht wirklich nur um die Compilerabhängigkeit.



  • Elmey schrieb:

    ...es geht wirklich nur um die Compilerabhängigkeit.

    Schau dir z.B. mal dies hier an. Ich verlasse mich wegen schlechten Erfahrungen nicht zu 100% darauf, aber wenn es mit 90% der Compiler läuft wäre es häufig schon ausreichend.


Anmelden zum Antworten