Je convertis une bibliothèque statique ATL en DLL et obtiens l'avertissement suivant sur toutes les classes exportées utilisant la classe ATL CString
(trouvée en atlstr.h):Avertissement C4251 lors de la construction d'une DLL exportant une classe contenant un membre ATL :: CString
avertissement C4251: 'Foo :: str_': class 'ATL :: CStringT' doit avoir dll-interface à utiliser par les clients de la classe 'Foo'
Je déclare correctement la classe Foo
comme e xporté via __declspec(dllexport)
. Est-ce un avertissement que je peux ignorer ou est-ce que je fais quelque chose de mal? Les paramètres du projet DLL sont configurés pour un lien dynamique avec ATL, mais cela ne semble pas faire de différence.
Par exemple:
#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
};
Tous les clients de cette DLL seront également en utilisant ATL.
Si vous êtes en mesure d'assurer à la fois la bibliothèque et le client est Adossé à la même version exacte de la bibliothèque ATL, que vous ne pouvez l'ignorer. –