Gemeinsamer Speicher von dll und exe



  • Hallo zusammen,

    ich habe ein Problem bei dem ich auch nach Stunden Internetrecherche keine Lösung gefunden habe. Vielleicht fällt Euch hier was dazu ein:
    In einer meiner Dll's lege ich mit new ein Objekt an. Ich kann mir aus der Anwendung selbst einen Zeiger auf diese Objekt holen und lesen problemlos darauf zugreifen. Sobald ich aber auf das Objekt (enthält CStrings und CStringlisten) etwas schreiben will stürzt das Programm ab. Wenn ich in der Dll Werte ergänze oder ändere ist alles super.
    Ich arbeite mit VC2010 und MFC. Gibt es irgendwelche Compilereinstellungen oder darf man das generell nicht?
    Bin hier völlig ratlos und freue mich über Tipps.

    Liebe Grüße



  • Wenn Du nicht nur POD Typen verwendest, dann müssen alle Komponenten (also in Deinem Fall EXE und DLL) *dynamisch* gegen die *gleiche* Version der CRT/MFC gelinkt werden!!!



  • Vielen Dank für den Hinweis.
    Ich habe die MFC jeweils statisch verlinkt.
    Es ist aber natürlich die Gleiche.
    Kann das damit nicht funktionieren und warum?
    Ich traue mich nicht die statische Verlinkung raus zu nehmen, da hatte ich schon viele Probleme.

    Liebe Grüße



  • Wenn Du die gleichen Instanzen der Klassen, die einen Allokator verwenden (z.B. CString) in der EXE *und* der DLL verwendtest, dann müssen beiden den gleichen Allokator verwenden (new/delete)!
    Verwenden sie einen unterschiedlichen (was bei statisch gelinkt der Fall ist, da die EXE und die DLL jeweils ihre eigene CRT mitbringen), dann wird z.B. ein new in der EXE gemacht und in der DLL wird auf diesen Zeiger dann ein "delete" gemacht, was natürlich nicht geht, da es zwei getrennte CRTs sind.

    Also: Entweder gegen die DLL-Version der CRT/MFC linken, oder eben nur POD (Plain Old Datatypes) verwenden!!!! Also int/char* usw.



  • Vielen Dank,
    jetzt muß ich mich nur noch für eine Variante entscheiden.


Log in to reply