Warnung C4251 beim Erstellen einer DLL, die eine Klasse exportiert, die einen ATL :: CString-Member enthält
Ich konvertiere eine ATL-basierte statische Bibliothek in eine DLL und erhalte die folgende Warnung für alle exportierten Klassen, die die ATL verwendenCString
Klasse (gefunden in atlstr.h):
Warnung C4251: 'Foo :: str_': Klasse 'ATL :: CStringT' muss über eine DLL-Schnittstelle verfügen, um von Clients der Klasse 'Foo' verwendet zu werden
Ich erkläre das richtigFoo
Klasse als exportiert über__declspec(dllexport)
. Ist das eine Warnung, die ich ignorieren kann oder mache ich etwas falsch? Die DLL-Projekteinstellungen sind so eingestellt, dass sie dynamisch mit ATL verknüpft sind, dies scheint jedoch keinen Unterschied zu machen.
Zum Beispiel:
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif
// This class is exported from the DLLTest.dll
class DLLTEST_API Foo
{
public:
Foo();
CString str_; // WARNING C4251 HERE
};
Alle Clients dieser DLL verwenden ebenfalls ATL.