Einbinden einer DLL in einer DLL unter VS2012



  • Hallo zusammen,
    Ich möchte in meinem aktuellen Projekt eine DLL, welche ich selber geschrieben habe, bei der Erstellung einer neuen DLL verwenden. Dazu habe ich, wie bei einer Anwendung, Die Include-und Bibliotheksverzeichnisse unter Visual Studio 2012 angepasst und den Linker-Suchpfad erweitert und anschließend die lib der DLL eingebunden. Allerdings bekom me ich aus einem mir vollkommen unverständlichen Grund einen Linkererror, dass eine in der bereits fertigen DLL definierte globale Varioable ein "Nicht aufgelöstets externes Symbol" sei. Was mich daran wundert, ist, dass dieses Problem nicht auftritt, wenn ich die DLL in eine EXE einbinde.

    Ich hoffe, dass mir hier jemand weiterhelfen kann.



  • Hast du ein export/import macro vor der variable?

    #ifdef BUILD_PROJECTNAME_DLL
    #define EXPORT __declspec(dllexport)
    #else
    #define EXPORT __declspec(dllimport)
    #endif
    


  • Ja, ein solches Makro habe ich. Allerdings bin ich bei meiner Suche im Netz darauf gestoßen, dass globale Variablen in DLL's, welche auch in anderen genutzt werden sollen, mithilfe einer Linkeroption in eine gemeinsamen Speicherbereich geschrieben werden sollen. Dementsprechend sieht mein Code jetzt so aus:

    #pragma data_seg (".mydata")
    // Globale Variablen mit initialisierung
    int i =0;
    #pragma data_seg()
    #pragme comment(linker, "/SEGMENT:.mydata, RWS")
    
    // DLL-Hauptfunktion
    

    Die Headerdatei, welche in alle DLL's eingebunden wird, sieht so aus:

    extern int i;
    

    Allerdings bekomme ich immernoch denselben linkerfehler. Ich denke, dass ich in der Headerdatei irgendwas falsch mache, allerdings habe ich im Moment nicht den blassensten Schimmer davon, was.

    Ich hoffe, dass ihr mir miot diesen Infos noch ein wenig weiterhelfen könnt.


Anmelden zum Antworten