erstellen einer WIN32 DLL mit <string>



  • Hallo!

    Nach langem probieren habe ich es geschafft aus meiner eigenen Klasse eine WIN32 DLL zu erstellen. War eigentlich ganz einfach:

    1. Neues Projekt im VS7 angelegt.
    2. Projekteinstellungen: "Visual C++-Projekte/Win32/Win32-Projekt
    3. Unter Anwendungseinstellungen -> DLL
    4. dem erstellten Anwendungsgerüst meine Klasse in Form von Headerdatei (.h) und Implementierungsdatei(.cpp) hinzufügen.
    5. der Headerdatei folgendes hinzufügen :

    #define DLLEXPORT __declspec(dllexport)
    
    class DLLEXPORT ClassName
    {
        // Eigenschaften und Methoden unverändert lassen !!!
    }
    

    6. Projekt erstellen drücken (ohne vorher meine Klassenheader irgendwo per #include in den erstelleten Projektcode einzufügen)
    7. Fertig !!!!

    So weit so gut.

    Jetzt habe ich aber in meiner Klasse Strings benutzt, und dafür die STL Bibliothek <string> per #include eingebunden. Also sieht es ab Schritt 5 so aus:

    #include <string>
    #define DLLEXPORT __declspec(dllexport)
    
    using namespace std;
    
    class DLLEXPORT ClassName
    {
        string member;
        // Eigenschaften und Methoden unverändert lassen !!!
    }
    

    Wenn ich jetzt das Projekt erstelle, dann bekomme ich die Warnung: *"warning C4251: 'ClassName::member': class 'std::basic_string<_Elem,_Traits,_Ax>' erfordert eine DLL-Schnittstelle, die von Clients von class 'ClassName' verwendet wird
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>,
    _Ax=std::allocator<char>
    ]"
    *

    Was ist das für eine Warnung, und wie kann ich sie beheben??

    Funktionieren tut die Dll trotzdem, aber wenn ich die erstellte Dll nun benutze, um sie per #include für eine neue Dll zu verwenden, dann bekomme ich beim Benutzen ganz komische Fehlermeldungen. Bei der Fehlerbehebung wollte ich dann lieber ganz vorne anfangen.

    Ich hoffe ich finde hier einen Experten, der mir helfen kann.

    Gruß
    Maik



  • Dieser Artikel sollte dir weiterhelfen: http://support.microsoft.com/kb/q168958/

    Gruss
    EB


Anmelden zum Antworten