Objekt aus DLL exportieren, Compilerwechsel



  • Hallo,

    ich exportiere aus einer DLL ein Objekt (Visual Studio 2003):

    class __declspec( dllexport ) Objekt 
    {
    //...
    }
    

    Nun möchte ich die DLL mit einem VStudio-2010-Projekt verwenden und es knallt bei der Erzeugung des Objektes.

    Ist das ganze compilerabhängig?
    Hängt es an der MFC-Version?
    Gibt es Wege, die DLL zu verwenden?



  • Ja es ist compierabhängig. Einziger (mir bekannter) Weg: die Dll mit VS2010 neu kompilieren (oder auf Klassen verzichten und Funktionen nur mit extern "C" exportieren).



  • stimpy schrieb:

    Ist das ganze compilerabhängig?
    Hängt es an der MFC-Version?
    Gibt es Wege, die DLL zu verwenden?

    Es gibt für C++ keine Binärkompatibilität bei den Schnittstellen, daher werden viele C++ DLLs mit einer C-Schnittstelle ausgestattet. Was genau möglich ist, und was nicht hängt also eher vom Zufall als von allen anderen ab.



  • Danke allerseits! Ich hatte es schon vermutet.
    Man findet in der Doku immer was geht, aber nie was nicht geht, und warum...

    DLL-Hölle, Hölle, Hölle! 😃



  • Was auch gehen würde:

    1. Schnitstelle (Klasse mit nur rein virt. Funktionen) deines zu exportierenden Objekts erstellen
    2. Implementation dieser Schnittstelle befindet sich in der DLL
    3. Factory Funktion anbieten und als extern "C" exportieren (ev. auch Release Funktion anbieten)

    Zur Schnittstelle sei gesagt, dass sie nur Basis Typen enthalten darf (oder weitere Zeiger / Referenzen auf Interfaces).

    So kann eine DLL mit VS2010 erstellt gut in VC++6.0 benutzt werden.

    Nachlesen kann man das hier:
    Imperfect C++ | ISBN: 9780321228772



  • Ahh, cool, sowas in der Art will ich gerade machen!
    "Imperfect ..." das könnte 'ne neue IT-Buchreihe werden. 🙂

    Danke!



  • Im Prinzip ist ja COM+ der offizielle Lösungsweg.


Anmelden zum Antworten