Ostrzeżenie C4251 podczas budowania biblioteki DLL, która eksportuje klasę zawierającą element ATL :: CString
Konwertuję bibliotekę statyczną opartą na ATL na bibliotekę DLL i otrzymuję następujące ostrzeżenie na wszystkich wyeksportowanych klasach, które używają ATLCString
klasa (znaleziona w atlstr.h):
ostrzeżenie C4251: „Foo :: str_”: klasa „ATL :: CStringT” musi mieć interfejs dll do użycia przez klientów klasy „Foo”
Prawidłowo deklarujęFoo
klasa eksportowana przez__declspec(dllexport)
. Czy to ostrzeżenie, które mogę bezpiecznie zignorować, czy robię coś złego? Ustawienia projektu DLL są ustawione tak, aby dynamicznie łączyć się z ATL, ale to nie wydaje się mieć znaczenia.
Na przykład:
#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
};
Wszyscy klienci tej biblioteki DLL będą również używać ATL.