Warnung in dll



  • Hallo

    Ich habe mir eine kleine dll gebaut (ich habe es endlich geschafft) und nun bekomme ich folgende Warnung:

    warning C4251: 'SDL::Sound::m_vMusic' : class 'std::vector<_Ty>' needs to have dll-interface to be used by clients of class 'SDL::Sound'

    Diese Warnung bekomme ich nicht nur einmal. Was hat das zu bedeuten? Hat jemand eine gute Idee?

    chrische



  • nimm die Fehlermeldung und suche damit in der MSDN. DA stehen dann mögliche Gründe, warum der Compiler die anzeigt.

    MSDN schrieb:

    Fehlermeldung
    'Bezeichner': Die Klasse 'Typ' benötigt eine DLL-Schnittstelle, damit Clients der Klasse 'Typ2' sie verwenden können
    'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'

    Um die Gefahr einer Datenbeschädigung beim Exportieren einer Klasse mit __declspec(dllexport) zu minimieren, stellen Sie Folgendes sicher:

    Auf alle statischen Daten wird über Funktionen zugegriffen, die aus der DLL exportiert werden.

    Inlinemethoden der Klasse dürfen statische Daten nicht ändern.

    Inlinemethoden der Klasse verwenden keine CRT-Funktionen, und auch andere Bibliotheksfunktionen verwenden keine statischen Daten. (Weitere Informationen finden Sie unter http://support.microsoft.com/default.aspx?scid=KB;EN-US;190799.)

    Methoden der Klasse (unabhängig von Inlining) dürfen keine Typen verwenden, bei denen die Instanziierung in der EXE und der DLL über verschiedene statische Daten verfügen.

    Sie können das Exportieren von Klassen vermeiden, indem Sie eine DLL definieren, durch die eine Klasse mit virtuellen Funktionen sowie Funktionen definiert werden, die zum Instanziieren und Löschen von Objekten des Typs aufgerufen werden können. Sie können dann einfach virtuelle Funktionen für den Typ aufrufen.

    Weitere Informationen zum Exportieren von Vorlagen finden Sie unter http://support.microsoft.com/default.aspx?scid=KB;EN-US;168958.

    C4251 kann in Microsoft Visual C++ 2005 ignoriert werden, wenn Sie von einem Typ in der C++-Standardbibliothek ableiten, eine Debugversion kompilieren (/MTd) und sich die Fehlermeldung des Compilers auf _Container_base bezieht.

    was passendes dabei?


Anmelden zum Antworten